기타/K8S

K8S) pod 내부에서 외부 DNS 못 찾을 때 우회법_hostAlias,coredns

MightyTedKim 2023. 2. 26. 20:55
728x90
반응형

쿠버네스티는 설치할 때마다 새로워요.

hw가 문제일 때도 있고, kernel 버전이 안 맞을 때도 있죠

하지만 대부분의 절망 포인트는 네트워크 더라고요...

 

pod안에서 외부 dns 접근 못하던 문제를 어떻게 우회해서 해결했는지 정리했습니다

예상 독자는 다음과 같아요

  1. 온프렘 환경에서 고군분투 쿠버를 설치하시는 분들
  2. 네트워크 잘 모르는데 쿠버 설치하시는 분들
  3. 저를 불쌍히 여기실 수 있는 분들

문제: 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

 

Kubernetes) k8s와 Airflow 이용한 spark작업_SparkKubernetesOperator

요약 1. kubenetes 환경에서 airflow를 이용해 spark_submit을 함 2. SparkKubernetesOpertor(SKO)를 선택함 개요 상황 쿠버네티스 클러스터 환경에서 spark_submit 관리 필요 후보 (3가지) KubernetePodOperator(KPO) : dag SparkA

mightytedkim.tistory.com

https://github.com/GoogleCloudPlatform/spark-on-k8s-operator/blob/master/docs/user-guide.md

 

GitHub - GoogleCloudPlatform/spark-on-k8s-operator: Kubernetes operator for managing the lifecycle of Apache Spark applications

Kubernetes operator for managing the lifecycle of Apache Spark applications on Kubernetes. - GitHub - GoogleCloudPlatform/spark-on-k8s-operator: Kubernetes operator for managing the lifecycle of A...

github.com

https://artifacthub.io/packages/helm/riftbit/jupyterhub

 

jupyterhub 0.1.19 · riftbit/riftbit

JupyterHub brings the power of notebooks to groups of users. It gives users access to computational environments and resources without burdening the users with installation and maintenance tasks

artifacthub.io

 

728x90
반응형