设置 ClusterIp 时 Kubernetes 服务未公开
Kubernetes service not exposed when ClusterIp is set
我有以下 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 无法访问?
关键是'clusterIP: None'。
如果不设置clusterIP,k8s会自动为服务分配一个,kube-dns也会给服务设置一个域名,命名为mariadb.[namespace].svc.cluster.local,这是你的第一个案件。
而如果 clusterIP 设置为 'None',这意味着 k8s 不会为服务分配 ip,在这种情况下,kube-dns 将为服务指向的每个端点设置一个域名,在你的第二种情况下,它是 mariadb-0.mariadb.[namespace].svc.cluster.local。
你也可以设置clusterIP为一个ip地址,这样就和你第一种情况一样了。
这就是为什么在第二种情况下可以 ping mariadb-0.mariadb.[namespace].svc.cluster.local,而在第一种情况下不能。
我有以下 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 后此内部 url 无法访问?
关键是'clusterIP: None'。
如果不设置clusterIP,k8s会自动为服务分配一个,kube-dns也会给服务设置一个域名,命名为mariadb.[namespace].svc.cluster.local,这是你的第一个案件。
而如果 clusterIP 设置为 'None',这意味着 k8s 不会为服务分配 ip,在这种情况下,kube-dns 将为服务指向的每个端点设置一个域名,在你的第二种情况下,它是 mariadb-0.mariadb.[namespace].svc.cluster.local。
你也可以设置clusterIP为一个ip地址,这样就和你第一种情况一样了。
这就是为什么在第二种情况下可以 ping mariadb-0.mariadb.[namespace].svc.cluster.local,而在第一种情况下不能。