我正在尝试使用StatefulSet创建Cassandra服务。 当我使用如下所示的无头服务时,一切正常,Cassandra pod的主机名是cassandra-0.cassandra.default.svc.cluster.local 而且我可以从另一个Pod ping此主机名。
apiVersion: v1
kind: Service
metadata:
labels:
app: cassandra
name: cassandra
spec:
clusterIP: None
ports:
- port: 9042
selector:
app: cassandra
但是,由于我需要将Cassandra服务公开到群集的外部,然后将服务更改为节点端口类型,如下所示,然后DNS停止工作,其主机名为cassandra-0.cassandra.default.svc。 cluster.local无法再访问。
apiVersion: v1
kind: Service
metadata:
labels:
app: cassandra
name: cassandra
spec:
type: NodePort
ports:
- port: 9042
nodePort: 30042
selector:
app: cassandra
关于我在做什么的任何想法,请告诉我是否需要其他信息。
谢谢。
(更新:) 在我的设置中,服务位于子集10.96.0.0/12中,而pod位于子网10.244.0.0/16中。
使用类型NodePort时,在10.96.0.0/12子集中为cassandra服务分配了cluster-ip
root@kube-master:/hostdir# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/cassandra-0 1/1 Running 0 11m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/cassandra NodePort 10.98.104.176 <none> 9042:30042/TCP 11m
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 16m
NAME DESIRED CURRENT AGE
statefulset.apps/cassandra 1 1 11m
nslookup结果是
root@cassandra-0:/# nslookup cassandra.default
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: cassandra.default.svc.cluster.local
Address: 10.98.104.176
虽然所有其他Pod都在子集10.244.0.0/16中,所以我认为这是为什么对cassandra-0.cassandra.default.svc.cluster.local进行ping的原因,因为子集10.96.0.0/这些吊舱无法访问12。
root@kube-master:/hostdir# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
cassandra-0 1/1 Running 0 12m 10.244.4.2 kube-node-2
那我该如何解决这个问题?我试图将service和pod放在同一个子集中,但是似乎不能以这种方式工作,因为在这种情况下,我什至无法ping通任何东西。
谢谢。