kubernetes - 无法通过 minikube 上的主机名 ping 其他 pod
问题描述
我有一个有两个副本的 statefulSet。它的无头服务名称是“gov-svc” 它是->
- .metadata.name:sts
- .metadata.namespace:默认
- .spec.serviceName: gov-svc
- .spec.template.spec.subdomain: gov-svc
- .spec.replicas: 2
在运行 statefulSet 之前
kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-99b9bb8bd-qdnsb 1/1 Running 0 4h
kube-system etcd-minikube 1/1 Running 0 4h
kube-system kube-addon-manager-minikube 1/1 Running 0 4h
kube-system kube-apiserver-minikube 1/1 Running 0 4h
kube-system kube-controller-manager-minikube 1/1 Running 1 4h
kube-system kube-proxy-b9np6 1/1 Running 0 4h
kube-system kube-scheduler-minikube 1/1 Running 0 4h
kube-system kubernetes-dashboard-7db4dc666b-bsk8k 1/1 Running 0 4h
kube-system storage-provisioner
在从 pod 运行这个 statefulSet 的两个 podsts-0
之后,ping
结果:
$ ping sts-0.gov-svc.default.svc.cluster.local
PING sts-0.gov-svc.default.svc.cluster.local (172.17.0.11): 56 data bytes
64 bytes from 172.17.0.11: seq=0 ttl=64 time=0.051 ms
64 bytes from 172.17.0.11: seq=1 ttl=64 time=0.444 ms
^C
--- redis-cluster-exp-0-0.redis-cluster-exp.default.svc.cluster.local ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.051/0.247/0.444 ms
但是当我尝试ping sts-1
from时sts-0
,它说:
$ ping sts-1.gov-svc.default.svc.cluster.local
ping: bad address 'sts-1.gov-svc.default.svc.cluster.local'
我需要通过主机名成功 ping 其他 pod。我该怎么做?
解决方案
您需要创建headless service
才能在StatefulSet
. 就像是:
apiVersion: v1
kind: Service
metadata:
name: gov-svc-headless
labels:
your_label: your_value
spec:
selector:
your_label: your_value
ports:
- port: your_port
name: transport
protocol: TCP
clusterIP: None <---
笔记:
使用选择器对于定义选择器的无头服务,端点控制器在 API 中创建端点记录,并修改 DNS 配置以返回直接指向支持该服务的 Pod 的 A 记录(地址)。
笔记:
或没有定义选择器的无头服务,端点控制器不会创建端点记录。但是,DNS 系统会查找并配置:
ExternalName 类型服务的 CNAME 记录。与服务共享名称的所有其他类型的任何端点的记录。
更多信息:https ://kubernetes.io/docs/concepts/services-networking/service/#headless-services
推荐阅读
- c# - 如何将我的 Ajax 调用参数绑定到我的控制器模型参数
- python-3.x - 我想用 python 爬取一个网站,但我遇到了麻烦。requests 库还可以,但 Scrapy 为 400,代码如下
- java - 运行时使用的代码是否有自动突出显示
- python-3.x - 通过 Python 启动 AWS EC2 实例
- python - 在一系列步骤中撤消先前步骤的最佳方法
- swift - 在 iOS 11 LargeTitles 中将单行标题转换为多行标题时如何去除跳转效果
- stored-procedures - 尝试插入表时出现 AlwaysEncrypted 列错误
- wpf - 由换行符分隔的行在 WPF TextBlock 中未正确显示
- java - 将两个数组列表合并为一个新数组并对其进行排序(参见示例)
- c# - 在c#中根据泛型类型T选择委托