규도자 개발 블로그
k8s kind cluster 만들 때 SAN 설정하기 (kind cluster에 외부 접속 허용하기) 본문
k8s kind cluster 만들 때 SAN 설정하기 (kind cluster에 외부 접속 허용하기)
규도자 (gyudoza) 2023. 1. 21. 18:02k8s kind cluster 만들 때 SAN 설정하기 (kind cluster에 외부 접속 허용하기)
로컬에서 간단하게 k8s환경을 구성해서 테스트해볼 때 주로 사용하는 minikube와 비슷한 역할을 하는게 kind이다. 솔직히 말해서 둘의 차이점은 잘 모르겠다. 그래서 ChatGPT쨩에게 물어봤다.
라고한다. 생각해보니 minikube는 하나의 클러스터만 설치할 수 있었던 것 같고(노드는 여러 개 설정 가능하지만) kind는 클러스터 자체도 여러개 설정 가능했던 것으로 기억한다. ChatGPT로 기억살리기. 굳이다.
아, 참고로 kind의 공식사이트는 https://kind.sigs.k8s.io/ 이곳이다.
뭐 아무튼 이 kind cluster를 만들고나서 외부에서 접속하기 위해선 SAN설정이 필요하다. SAN이란 무엇인가. Subject Alternative Name이라고 하는데 클러스터를 생성할 때 생기는 apiserver 인증서에 등록되는 허가받은 주소라고 간단하게 표현할 수 있다. 여기에서 말하는 apiserver는 kind로 생성된 k8s cluster 그 자체의 apiserver 주소를 의미한다.
간단한 예를 들어서 kind create cluster --name kind-test
라는 명령어를 통해 kind-kind-test
라는 클러스터가 만들어지면 모든 설정이 기본적값으로 생성되는데 이렇게 생성하면 apiserver의 주소가 127.0.0.1:randomport
가 돼서 포트포워딩이나 리버스프록시 같은 다른 방법을 더하지 않으면 kind-kind-test
에는 같은 머신에서밖에 접속할 수 없는 상태가 된다.
다행히도 kind도 k8s manifest file처럼 yaml파일을 작성해서 특정 설정값들을 커스터마이징한 클러스터를 생성할 수 있는 방법이 있다.
https://kind.sigs.k8s.io/docs/user/quick-start/#configuring-your-kind-cluster
https://kind.sigs.k8s.io/docs/user/configuration/
위의 링크에 해당 방법에 대한 안내가 자세히 쓰여져있다.
아래링크에서 제공하는 API Server sample이
이렇게 작성돼있다. 이것을 바꿔서
이렇게 설정하여 cluster를 생성해 외부에서 접속하려고 해도 분명히
Unable to connect to the server: x509: certificate is valid for {some ip addresses...}, 0.0.0.0, not {access tryed address}
이런 에러가 뜰 것이다.
위의 설명과 합쳐서 이 에러가 뜨는 이유에 대해서 말하자면, kind create cluster
명령어로 만든 cluster의 config에는 클러스터 api의 ip에 certification이 돼있는 것인데 (0.0.0.0으로 만들었으니 0.0.0.0에 대한 ip로) 실제 해당 kind cluster가 돌아가는 머신의 public ip는 달라서 kind cluster를 만들면서 생긴 .kube/config에서 cluster의 server주소를 다른곳에서 다운받아 머신의 주소로 변경하면 해당 주소에 대한 인증이 없기 때문에 접근이 안되는 것이다.
그래서 kind로 만든 cluster의 SAN에다가 kind가 돌아가고 있는 머신의 public ip를 추가해줘야만 해당 ip로의 요청이 통과되어 외부에서도 접속할 수 있게 된다.
아래와 같이 config.yaml
을 작성하고
kind cluster를 생성하면 외부에서 접속할 수 있는 kind cluster를 생성할 수 있다.
'DevOps > Kubernetes' 카테고리의 다른 글
[macOS] kubectl, kustomize, minukube설치하기 (0) | 2022.02.26 |
---|