我有以下YAML文件 -
apiVersion: v1
kind: Service
metadata:
labels:
name: mariadb
name: mariadb
spec:
ports:
- port: 3306
selector:
name: mariadb
创建此服务时,会自动设置ClusterIP。 我的有状态集' mariadb'使用此服务公开。 但是如果我在Kubernetes上登录另一个pod,我就无法使用
ping这个podping mariadb-0.mariadb.[namespace].svc.cluster.local
如果将ServiceType设置为' NodePort'它也不起作用。
如果我将服务更新为
apiVersion: v1
kind: Service
metadata:
labels:
name: mariadb
name: mariadb
spec:
ports:
- port: 3306
clusterIP: None
selector:
name: mariadb
当我登录Kubernetes上的另一个pod时,我可以使用
ping这个podping mariadb-0.mariadb.[namespace].svc.cluster.local
设置ClusterIP时,是否有任何理由无法访问此内部网址?
答案 0 :(得分:1)
关键是'clusterIP:None'。
如果未设置clusterIP,k8s将自动为服务分配一个,kube-dns也将为该服务设置域名,名为mariadb。[namespace] .svc.cluster.local,这是您的第一个案例。
如果clusterIP设置为'None',则表示k8s不为服务分配ip,在这种情况下,kube-dns将为服务指向的每个端点设置域名,在第二个case,它是mariadb-0.mariadb。[namespace] .svc.cluster.local。
此外,您可以将clusterIP设置为IP地址,在这种情况下,它与您的第一个案例相同。
这就是为什么你可以在你的第二种情况下ping mariadb-0.mariadb。[namespace] .svc.cluster.local,而你的第一种情况则不能。