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
Надеюсь это поможет.