Kubernetes 1.13, CoreDNS - служба скручивания кластеров?

По умолчанию в 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

Благодарю.

1 ответ

Решение

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

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

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

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

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

 curl http://<node_ip>:31991

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

Другие вопросы по тегам