设置ClusterIp时,Kubernetes服务不会公开

时间:2018-05-22 05:16:04

标签: kubernetes ibm-cloud kubernetes-service

我有以下YAML文件 -

apiVersion: v1
kind: Service
metadata:
  labels:
    name: mariadb
  name: mariadb
spec:
  ports:
    - port: 3306
  selector:
    name: mariadb

创建此服务时,会自动设置ClusterIP。 我的有状态集' mariadb'使用此服务公开。 但是如果我在Kubernetes上登录另一个pod,我就无法使用

ping这个pod
ping 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这个pod
ping mariadb-0.mariadb.[namespace].svc.cluster.local

设置ClusterIP时,是否有任何理由无法访问此内部网址?

1 个答案:

答案 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,而你的第一种情况则不能。