Как я могу подтвердить, что ваш yaml StatefulSet работает просто отлично, а безголовый сервис создает DNS-имя, направляющее к конечным точкам модулей.Я создал простой модуль nginx для подключения к telnet для проверки.Вот вывод:
Проверьте, существуют ли конечные точки и сервис для cassandra
$ kubectl get svc,ep cassandra
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/cassandra ClusterIP None <none> 9042/TCP,9160/TCP 2h
NAME ENDPOINTS AGE
endpoints/cassandra 10.56.0.10:9160,10.56.3.3:9160,10.56.4.2:9160 + 3 more... 2h
Выполните к соседнему модулю в том же пространстве имен и telnet к сервису и пакетам
$ kubectl exec -it nginx-79dbd67896-9dwp8 bash
root@nginx-79dbd67896-9dwp8:/# telnet cassandra 9042
Trying 10.56.3.3...
Connected to cassandra.default.svc.cluster.local.
Escape character is '^]'.
telnet> quit
Connection closed.
root@nginx-79dbd67896-9dwp8:/# telnet 10.56.0.10 9042
Trying 10.56.0.10...
Connected to 10.56.0.10.
Escape character is '^]'.
Как видно из службы вывода и модули прослушивают порт 9042, а не 9160, поскольку порт 9160 предназначен для сервера Thrift API Cassandra, который по умолчанию отключен.Для получения дополнительной информации об этой проблеме проверьте https://github.com/docker-library/cassandra/issues/127.Вы должны проверить, как включить Thrift API порт.
Вы можете проверить порты прослушивания на модулях cassandra, выполнив один из этих модулей и выполнив следующие команды:
root@cassandra-0:/# apt update && apt install telnet net-tools
<output omitted>
root@cassandra-0:/# netstat -tulpen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:9042 0.0.0.0:* LISTEN 1000 10163244 -
tcp 0 0 127.0.0.1:43669 0.0.0.0:* LISTEN 1000 10162974 -
tcp 0 0 10.56.0.10:7000 0.0.0.0:* LISTEN 1000 10163145 -
tcp 0 0 127.0.0.1:7199 0.0.0.0:* LISTEN 1000 10162973 -
Hopeэто помогает!