K8S) pod 내부에서 외부 DNS 못 찾을 때 우회법_hostAlias,coredns
쿠버네스티는 설치할 때마다 새로워요.
hw가 문제일 때도 있고, kernel 버전이 안 맞을 때도 있죠
하지만 대부분의 절망 포인트는 네트워크 더라고요...
pod안에서 외부 dns 접근 못하던 문제를 어떻게 우회해서 해결했는지 정리했습니다
예상 독자는 다음과 같아요
- 온프렘 환경에서 고군분투 쿠버를 설치하시는 분들
- 네트워크 잘 모르는데 쿠버 설치하시는 분들
- 저를 불쌍히 여기실 수 있는 분들
문제: pod 안에서 dns 를 찾지 못함
이번에는 새로운 네트워크 망에 k8s cluster를 설치하는 작업을 했어요
그런데 이상하게 서버 몇대가, 회사 DNS에 접근을 잘 못하더라고요.
12대 중 2대가 접근이 되지 않아서 /etc/hosts에 특정 host를 명시해줬어요
불안한 마음에 k8s 설치하고 busybox 띄워서 nslookup/ping/telnet 해봤는데 응답이 없어요 ㅜ
hostalias로 명시하고 들어가니 접근은 가능하더라고요.
3일 정도 붙잡고 있다가, 일단 마침표 찍는 것이 우선이기에 다른 방식들을 찾아봤어요.
후보 1: k8s pod 안에 hostalias로 host와 ip를 명시하자
처음에는 이거로 하려했어요.
어떤 host에 접근해야하는지 명확하게 알 수 있어, 관리가 쉬울 것 같았기 때문이죠
jupyterhub 와 sparkapplication에 모두 hostalias를 사용할 수 있어요
https://artifacthub.io/packages/helm/riftbit/jupyterhub
https://github.com/GoogleCloudPlatform/spark-on-k8s-operator/pull/1133
하지만 Jupyterhub에서 실행하는 spark_submit의 executor에 hostalias를 전달할 방법이 없었어요
GPT에서 알려준대로 해봤는데 다 안되더라고요.
오픈은 해야하니까 다른 방법을 찾아봤어요
후보 2: coredns configmap에 박아두자
GPT 에 물어보니까 coredns의 configmap에 넣으라하더라고요.
시키는대로 hosts configmap에 추가하니 pod 내부에서 ip 접근이 가능했어요
```
hosts {
10.***.66.*** custom.custom.com
}
```
마무리
정석의 방법은 아니지만, 저처럼 일단 해결해야하는 분들이 도움을 받으셧으면 좋겠어요.
쿠버 네트워크 이슈 글을 쓰다보니까 급 슬퍼지는군요
작년 연말에는 인프라팀이 서버 재시작했는데, pod 내부에서 외부 dns 못 붙은 적이 있어요
`net.ipv4.ip_forward = 0` 설정이 초기화되서 그랬던 건데, 원인 찾느라 한참 걸렸어요.
궁금하신 분은 아래 링크 보시면 절규에 가까운 장애 대응글이 정리되어 있어요
https://mightytedkim.tistory.com/180
참고
https://mightytedkim.tistory.com/43
https://github.com/GoogleCloudPlatform/spark-on-k8s-operator/blob/master/docs/user-guide.md
https://artifacthub.io/packages/helm/riftbit/jupyterhub