无法在minikube上按主机名ping其他Pod

时间:2018-10-05 08:26:09

标签: kubernetes minikube kube-dns kubernetes-pod kubernetes-statefulset

我有一个带两个副本的statefulSet。 它的无头服务名称是“ gov-svc” 是->

  1. .metadata.name:sts
  2. .metadata.namespace:默认
  3. .spec.serviceName:gov-svc
  4. .spec.template.spec.subdomain:gov-svc
  5. .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

在运行此statefulSet的两个Pod之后,从Pod sts-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 sts-0时,它说:

$ ping sts-1.gov-svc.default.svc.cluster.local
ping: bad address 'sts-1.gov-svc.default.svc.cluster.local'

我需要按主机名成功ping其他Pod。我该怎么办?

1 个答案:

答案 0 :(得分:2)

您需要创建headless service以便能够在StatefulSet内彼此ping通副本。像这样:

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配置以返回以下内容的A记录(地址):   直接指向支持该服务的Pod。

注意:

  

或没有定义选择器的无头服务(端点)   控制器不会创建端点记录。但是,DNS系统   查找并配置:

     

ExternalName类型服务的CNAME记录。任何记录   对于所有其他类型,与服务共享名称的端点。

更多信息:https://kubernetes.io/docs/concepts/services-networking/service/#headless-services