Kubernetes 1.13, CoreDNS - cluster curl service?

12/25/2018

by default, in Kubernetes 1.13 CoreDNS is installed. Can you please tell me how to make a curl in a cluster by the name of the service?

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

So I get the correct answer.

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

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

And so no.

[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

Thanks.

-- JDev
coredns
kubernetes
kubernetes-service

1 Answer

12/25/2018

coredns or kubedns are meant to resolve the service name to its clusterIP (normal service) or correspondent Pod IP (headless service) inside the kubernetes cluster not outside. You are trying to curl the service name on the node, not inside the pod and hence it is not able to resolve the service name to its clusterIP.

YOu can go inside the pod and try following:

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

It will return you cluster IP and it means coredns is working fine. If your pod has curl utility then you can also curl it using service name (but from inside the cluster only)

If you want to access the service from outside the cluster, this service already exposed as NodePort so you can access it using:

 curl http://<node_ip>:31991

Hope this helps.

-- Prafull Ladha
Source: StackOverflow