Kubernetes 1.13, CoreDNS - служба curl кластера?

по умолчанию в Kubernetes 1.13 установлен CoreDNS. Подскажите пожалуйста, как сделать локон в кластере по имени сервиса?

[root@master ~]# kubectl get services
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.233.0.1   <none>        443/TCP   24h
[root@master ~]# kubectl get services --all-namespaces
NAMESPACE       NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                       AGE
kube-system     coredns                ClusterIP   10.233.0.3      <none>        53/UDP,53/TCP,9153/TCP                                        21h
tools           nexus-svc              NodePort    10.233.17.152   <none>        8081:31991/TCP,5000:31111/TCP,8083:31081/TCP,8082:31085/TCP   14h

[root@master ~]# kubectl describe services nexus-svc --namespace=tools
Name:                     nexus-svc
Namespace:                tools
Labels:                   tools=nexus
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"tools":"nexus"},"name":"nexus-svc","namespace":"tools"},"spec"...
Selector:                 tools=nexus
Type:                     NodePort
IP:                       10.233.17.152
Port:                     http  8081/TCP
.....

Итак, я получаю правильный ответ.

[root@master ~]# curl http://10.233.17.152:8081

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Nexus Repository Manager</title>
....

А так нет.

[root@master ~]# curl http://nexus-svc.tools.svc.cluster.local
curl: (6) Could not resolve host: nexus-svc.tools.svc.cluster.local; Unknown error
[root@master ~]# curl http://nexus-svc.tools.svc.cluster.local:8081
curl: (6) Could not resolve host: nexus-svc.tools.svc.cluster.local; Unknown error

Спасибо.


person JDev    schedule 25.12.2018    source источник


Ответы (1)


coredns или kubedns предназначены для преобразования имени службы в ее clusterIP (обычная служба) или соответствующий IP-адрес Pod (безголовая служба) внутри кластера Kubernetes, а не за его пределами. Вы пытаетесь свернуть имя службы на узле, а не внутри модуля, и, следовательно, он не может разрешить имя службы в свой clusterIP.

Вы можете зайти внутрь капсулы и попробовать следующее:

kubectl exec -it <pod_name> bash
nslookup nexus-svc.tools.svc.cluster.local

Он вернет вам IP-адрес кластера, и это означает, что coredns работает нормально. Если у вашего модуля есть утилита curl, вы также можете скрутить его, используя имя службы (но только внутри кластера).

Если вы хотите получить доступ к службе извне кластера, эта служба уже представлена ​​как NodePort, поэтому вы можете получить к ней доступ, используя:

 curl http://<node_ip>:31991

Надеюсь это поможет.

person Prafull Ladha    schedule 25.12.2018
comment
Ааааа, я дурак! Большое спасибо! С контейнера все работает. И каждый раз тестировал напрямую с узла. Гррр, сколько времени убил в поиске почему не работает. - person JDev; 19.02.2019