0

我有以下 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 时,是否有任何原因无法访问此内部 url?

4

1 回答 1

1

关键是'clusterIP:无'。

如果没有设置 clusterIP,k8s 会自动为服务分配一个,kube-dns 也会为服务设置一个域名,命名为 mariadb.[namespace].svc.cluster.local,这是你的第一种情况。

虽然如果 clusterIP 设置为“None”,这意味着 k8s 不会为服务分配 ip,在这种情况下,kube-dns 将为服务指向的每个端点设置一个域名,在第二种情况下,它是mariadb-0.mariadb.[命名空间].svc.cluster.local。

您也可以将 clusterIP 设置为 IP 地址,在这种情况下,它与您的第一种情况相同。

这就是为什么您可以在第二种情况下 ping mariadb-0.mariadb.[namespace].svc.cluster.local 而在第一种情况下不能。

于 2018-05-22T06:00:00.717 回答