티스토리 뷰

Cloud/Private Cloud

kubernetes internal domain

jacobbaek Jacob_baek 2020. 7. 31. 18:16

매번 까먹어서 통신을 위한 domain 을 입력해야할때 몇번을 찾는 경우가 있어 이번 기회에 정리하고자 한다.

[service-name].[namespace].svc.[cluster-name]

일반적으로 아래와 같이 kubernetes로 구동시켜진 pod에 exec 로 들어가 확인해보면 cluster name과 함께 service-name을 제외한 도메인을 확인할수 있다.

[root@master001 ~]# kubectl exec -it jenkins-859966c5fb-cczrk -n jenkins cat /etc/resolv.conf
nameserver 10.233.0.3
search jenkins.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

또한 아래와 같이 cluster name을 찾아볼수도 있다.

[root@master001 ~]# kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'
Cluster name    Server
cluster.local    https://100.100.200.200:6443

실제 통신 확인은 다양한 도구로 확인해볼수 있다.

  • host command
  • dig command
  • nslookup command
  • ping command
  • curl command
    등이 있고 이를 통해 lookup이 정상적으로 이루어지는지를 확인하면 된다.

관련해서 구조를 잘 정리해놓은 rancher page를 참고하면 좋을것 같다.

만약 headless service를 사용중이라면 다음과 같이 pod의 name까지 추가해주어 연결을 하면 된다.

실제 headless service의 경우 ClusterIP를 보유하고 있지 않고 None으로 설정되어 있기에 해당 하는 IP를 보유한 pod의 이름까지 직접 넣어주어야 한다. (일반적으로 statefulset에서 많이 사용된다.)

etcd-0.etcd-headless.default.svc.cluster.local:2379

즉 위 domain은 [podname].[headless-service-name].[namespace].svc.cluster.local 과 같은 구조를 가지게 되는것이다.

댓글
댓글쓰기 폼
공지사항
최근에 달린 댓글
Total
50,239
Today
20
Yesterday
45
링크
«   2020/11   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
글 보관함