Kubernetes
Kubernetes Calico node 시작 시 kube-apiserver의 svc로 통신 실패
김 정출
2024. 10. 26. 11:32
Kubernetes Calico node 시작 시 kube-apiserver의 svc로 통신 실패

[Issue]
- Calico node 시작 시에 kube api server의 svc와 통신 실패로 인해 시작을 못하는 상황입니다.
2023-06-21 04:03:37.230 [FATAL][29] tunnel-ip-allocator/allocateip.go 201:
failed to fetch node resource 'xxxx' error=Get "<https://10.233.0.1:443/api/v1/nodes/xxxxx>":
dial tcp 10.233.0.1:443: connect: connection refused
Calico node failed to start
Kubernetes Cluster가 Multi master로 구성되어 있는 상황이고, kube-apiserver의 Service와 Endpoint를 확인해보니 Public IP로 지정되어 있었습니다.
kube-apiserver의 --advertise-address가 퍼블릭 IP로 설정된 경우라면, Calico와 같은 내부 네트워크를 사용하는 CNI 플러그인이 kube-apiserver와 통신하지 못할 가능성이 큽니다. 특히 Calico는 Kubernetes API 서버에 접근할 때 내부 IP 주소를 선호하기 때문에, 퍼블릭 IP를 advertise-address로 지정하면 연결 문제가 발생할 수 있습니다.
[solution]
이를 해결하기 위해 다음과 같이 조치할 수 있습니다.
1. --advertise-address를 내부 IP로 변경하기
kube-apiserver의 --advertise-address를 내부 네트워크 IP로 변경하는 것이 가장 좋은 해결 방법입니다. 이를 통해 Calico와 같은 CNI 플러그인과 다른 클러스터 내부 서비스가 API 서버에 안정적으로 접근할 수 있습니다.
- /etc/kubernetes/manifests/kube-apiserver.yaml에서 -advertise-address 플래그를 찾은 후, 내부 IP 주소(예: 10.0.0.x)로 수정합니다.
- 저장 후 kube-apiserver가 자동으로 재시작되면서 새로운 설정이 적용됩니다.
sudo -i
vi /etc/kubernetes/manifests/kube-apiserver.yaml
--
spec:
containers:
- command:
- kube-apiserver
- --advertise-address=10.27.251.30
- --allow-privileged=true
- --anonymous-auth=True
2. 노드 및 기타 컴포넌트의 설정 확인
- --advertise-address를 변경하면 클러스터의 다른 컴포넌트와 워커 노드들이 API 서버에 내부 IP로 접근하는지 확인해야 합니다. Worker 노드에서 kubelet이 올바른 IP 주소로 API 서버에 접근하고 있는지 점검해 주세요.
3. Calico 및 CoreDNS 구성 점검
- --advertise-address 변경 후, Calico가 정상적으로 API 서버와 통신하는지 확인합니다. 문제가 지속될 경우, kubectl logs -n calico-system <calico-node-pod-name> 명령으로 Calico Pod의 로그를 확인해 보세요.
- CoreDNS도 올바른 API 서버 주소를 리졸빙하고 있는지 확인하여 네트워크 서비스가 정상적으로 동작하도록 해야 합니다.
이와 같이 내부 IP로 변경하면, Calico와의 통신이 원활해질 가능성이 높아집니다.
위의 설정으로 Calico node들이 복구가 시작됩니다.