Kubernetes服务dns解决方案返回错误的IP

时间:2017-01-20 18:08:20

标签: mysql docker service dns kubernetes

我有一个简单的MYSQL pod位于MYSQL服务后面。

此外,我还有另一个正在运行python进程的pod,它正在尝试连接到MYSQL pod。

如果我尝试从python pod手动连接到MYSQL pod的IP地址,那么一切都很好。但是,如果我尝试连接到MYSQL 服务,那么我会收到一条错误,我无法连接到MYSQL。

grant@grant-Latitude-E7450:~/k8s/objects$ kubectl describe pod mysqlpod 
Name:       mysqlpod
Namespace:  default
Node:       minikube/192.168.99.100
Start Time: Fri, 20 Jan 2017 11:10:50 -0600
Labels:     <none>
Status:     Running
IP:     172.17.0.4
Controllers:    <none>

grant@grant-Latitude-E7450:~/k8s/objects$ kubectl describe service mysqlservice
Name:           mysqlservice
Namespace:      default
Labels:         <none>
Selector:       db=mysqllike
Type:           ClusterIP
IP:         None
Port:           <unset> 3306/TCP
Endpoints:      172.17.0.5:3306
Session Affinity:   None
No events.

grant@grant-Latitude-E7450:~/k8s/objects$ kubectl describe pod basic-python-model
Name:       basic-python-model
Namespace:  default
Node:       minikube/192.168.99.100
Start Time: Fri, 20 Jan 2017 12:01:50 -0600
Labels:     db=mysqllike
Status:     Running
IP:     172.17.0.5
Controllers:    <none>

如果我附加到我的python容器并执行mysqlservice的nslookup,那么我实际上得到的是错误的 IP。如上所示,mysqlpod的IP是172.17.0.4,而nslookup mysqlservice正在解析为172.17.0.5。

grant@grant-Latitude-E7450:~/k8s/objects$ k8s exec -it basic-python-model bash
[root@basic-python-model /]# nslookup mysqlservice                    
Server:     10.0.0.10
Address:    10.0.0.10#53

Name:   mysqlservice.default.svc.cluster.local
Address: 172.17.0.5

我对kubernetes相当新,但是我已经在这个问题上敲了几个小时,我似乎无法理解我做错了什么。< / p>

2 个答案:

答案 0 :(得分:3)

所以这是完全正确的行为,但我错误配置了我的播客。

对于未来被困的人:

kubernetes服务中定义的选择器必须与您要提供的pod的标签匹配。 IE)在我的MySqlService.yaml文件中,我有&#34; mysqlpod&#34;的名称选择器:

apiVersion: v1
kind: Service
metadata:
  name: mysqlservice
spec:
  clusterIP: None 
  ports:
    - port: 3306
      targetPort: 3306
  selector:
    name: mysqlpod 

因此,在我的MySqlPod.yaml文件中,我需要一个完全匹配的标签。

kind: Pod
apiVersion: v1
metadata:
  name: mysqlpod
  labels:
    name: mysqlpod
spec:
  ...

答案 1 :(得分:1)

对于任何再次来到这里的人,请检查@gnicholas答案,但还要确保正确设置clusterIP: None

我恰好在clusterIP: None文件中缩进.yml,该命令被Kubernetes忽略,因此clusterIP被错误分配,从而导致IP错误。

请注意,验证不会引发任何错误,但会默默地忽略它。