2017-01-20 4 views
0

У меня есть простая подставка MYSQL, сидящая за сервисом MYSQL.Kubernetes service dns resolution return wrong IP

Кроме того, у меня есть еще один модуль, на котором выполняется процесс python, который пытается подключиться к модулю MYSQL.

Если я попытаюсь подключиться к IP-адресу модуля MYSQL вручную из python pod, все будет A-OK. Однако, если я попытаюсь подключиться к сервису MYSQL , тогда я получаю сообщение об ошибке, с которым я не могу подключиться к MYSQL.

[email protected]:~/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> 

[email protected]:~/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. 

[email protected]:~/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> 

Если я прилагаю к моему питона контейнер и сделать Nslookup из mysqlservice, то я на самом деле получаю неправильный IP. Как вы видели выше, IP-адрес mysqlpod равен 172.17.0.4, в то время как nslookup mysqlservice разрешает 172.17.0.5.

[email protected]:~/k8s/objects$ k8s exec -it basic-python-model bash 
[[email protected] /]# 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, но я стучал голову по этому вопросу в течение нескольких часов, и я не могу понять, что я делаю неправильно.

ответ

1

Так что это было точного правильного поведения, но я просто неправильно сконфигурировал свои стручки.

Для будущих людей, которые застряли:

селектора, определенных в службе kubernetes должны соответствовать ярлыку стручка (ов), вы хотите, чтобы служить. IE) В моем файле MySqlService.yaml У меня есть селектор имени для «mysqlpod»:

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: 
    ...