Как настроить Kubernetes DNS, используя IP-адрес, не связанный с хостом Kubernetes API?

Мне трудно понять, как можно получить Kubernetes DNS (skydns, теперь называемый kube-dns), чтобы контейнер / под kube-dns знал, как подключиться к серверу API, используя IP-адрес или хост, который будет работать независимо от если главный узел выходит из строя и другой сервер API запускается на хосте с другим IP-адресом?

Я пробовал использовать настоящую службу Kubernetes, но она работает на порту 443, и kube-dns (ранее - kube2sky) не может подключиться к нему.

Есть ли более простой способ, кроме механизма удаления и воссоздания модуля kube-dns?


person user3379574    schedule 09.09.2016    source источник
comment
и под воссозданием модуля kube-dns я имел в виду перезапуск модуля, когда сервер API меняет свой IP-адрес, потому что хост вышел из строя и был запущен в другом месте.   -  person user3379574    schedule 09.09.2016


Ответы (3)


Вы можете использовать:

kubelet describe svc kubernetes

person Cristhian Bicca    schedule 06.04.2017

Вы можете запросить endpoint и сразу найти тот, который соответствует kubernetes. Я могу получить это двумя способами. Один из них - это прямой запрос конечных точек:

$ kubectl get ep
NAME         ENDPOINTS              AGE
kubernetes   192.168.122.116:8443   15h

Или опишите службу kubernetes, работающую в пространстве имен default:

$ kubectl describe svc kubernetes
Name:                   kubernetes
Namespace:              default
Labels:                 component=apiserver
                        provider=kubernetes
Annotations:            <none>
Selector:               <none>
Type:                   ClusterIP
IP:                     10.0.0.1
Port:                   https   443/TCP
Endpoints:              192.168.122.116:8443
Session Affinity:       ClientIP
Events:                 <none>

Здесь я получаю IP-адрес и порт хоста, а он не работает на 443; это 8443. Посмотри, поможет ли это решить твою проблему.

Или попробуйте добавить еще один порт в службу kubernetes, целевой порт которой такой же.

person surajd    schedule 06.04.2017

как получить Kubernetes DNS (skydns, теперь называемый kube-dns), чтобы контейнер / под kube-dns знал, как подключиться к серверу API, используя IP-адрес или хост

Я не думаю, что kube-dns нужно подключаться к APIServer в дизайне Kubernetes.

Но если вы пытаетесь найти стабильный способ подключения к APIServer (как вы сказали, независимо от того, выходит ли из строя главный узел и запускается другой сервер API на хосте с другим IP-адресом), вы уже сделали это, если развернули ваш кластер с помощью kubeadm (дополнительная информация о kubeadm). И реализуется это через сервис Kubernetes. Вы можете проверить это так:

$ kubelet describe svc kubernetes
Name:                   kubernetes
Namespace:              default
Labels:                 component=apiserver
                        provider=kubernetes
Selector:               <none>
Type:                   ClusterIP
IP:                     10.96.0.1
Port:                   https   443/TCP
Endpoints:              10.140.0.2:6443
Session Affinity:       ClientIP
No events.

Вы можете получить доступ к APIServer через 10.96.0.1:443 (который является ClusterIP) или 10.140.0.2:6443 (который является IP-адресом модуля APIServer pod) через:

$ curl https://10.140.0.2:6443/version --cert /etc/kubernetes/pki/apiserver.pem --key /etc/kubernetes/pki/apiserver-key.pem --cacert /etc/kubernetes/pki/ca.pem
{
  "major": "1",
  "minor": "5",
  "gitVersion": "v1.5.4",
  "gitCommit": "7243c69eb523aa4377bce883e7c0dd76b84709a1",
  "gitTreeState": "clean",
  "buildDate": "2017-03-07T23:34:32Z",
  "goVersion": "go1.7.4",
  "compiler": "gc",
  "platform": "linux/amd64"
}
person Crazykev    schedule 06.04.2017