4개의 머신에 Kubernetes 클러스터를 생성하고 싶습니다. 하나는 공용 IP 주소를 가지며 인터넷에서 연결할 수 있습니다(이것을 이라고 부르겠습니다 Master
). 마스터에는 도메인 이름도 할당되어 있습니다(예: master.foo
).
세 대의 머신이 라우터 뒤의 동일한 개인 네트워크(192.168.5.0)에 있습니다(이것을 이라고 부르겠습니다 Worker A/B/C
).
다음 컴퓨터 간에 클러스터를 성공적으로 설정했습니다.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
Master Ready master 5d20h v1.17.1
WorkerA Ready <none> 21h v1.17.1
WorkerB Ready <none> 21h v1.17.1
WorkerC Ready <none> 5d17h v1.17.1
또한 오류 없이 다른 작업자에서 실행되는 포드도 있습니다.
다음을 사용하여 클러스터를 초기화했습니다.
sudo kubeadm init --control-plane-endpoint=master.foo --pod-network-cidr=10.244.0.0/16
(Flannel을 오버레이 네트워크로 사용)
문제는 마스터에서 kubectl exec
또는 실행 중 오류가 발생한다는 것입니다.kubectl port-forward
paulb@galaxy:~$ kubectl -n pgo port-forward svc/postgres-operator 8443:8443
error: error upgrading connection: error dialing backend: dial tcp 192.168.5.192:10250: i/o timeout
192.168.5.192
물론 작업자 중 한 명의 개인 IP는 어디에 있습니까? 나는 이것이 여기에 명시된 내용과 관련이 있다고 생각합니다.https://kubernetes.io/docs/concepts/cluster-administration/networking/#the-kubernetes-network-model
pods on a node can communicate with all pods on all nodes without NAT
그렇다면 이 모든 컴퓨터 사이에 OpenVPN 네트워크를 설정해야 합니까? 그렇다면 kubeadm init --control-plane-endpoint
OpenVPN 어댑터에서 kubernetes가 필요하다는 사실과 어떻게 결합할 수 있습니까 tun0
? 내가 뭐 놓친 거 없니? 작업자에서 컨테이너가 실행되고 있는 것이 이상해 보이지만 kubectl exec
마스터에서 작업자에 대해 명령( )을 실행할 수 없습니다.
답변1
kubectl port-forward
(또는 exec
)을 실행하면kubectl에 연결 중입니다API 서버그런 다음 연결됩니다쿠벨렛이는 포트 10250의 모든 노드에서 실행됩니다.
마스터 노드는 워커와 동일한 네트워크에 있지 않고 워커는 외부에서 접근할 수 없기 때문에 마스터 노드에서 실행되는 api-server가 워커에 연결할 수 없습니다.
예, VPN이 문제를 해결할 수 있습니다. 그리고 kubelet을 사용하려면 tun0
IP 주소를 다음과 같이 광고해야 합니다.--node-ip
kubelet 옵션
--node-ip 문자열
노드의 IP 주소입니다. 설정되면 kubelet은 노드에 이 IP 주소를 사용합니다.
나는 마스터 노드가 외부에서 클러스터로 진입하는 유일한 지점이라고 가정합니다. 따라서 외부에서 포드를 노출하고 액세스할 수 있으려면 모든 노드, 특히 이 경우 마스터와 워커 사이의 완전한 네트워크 연결이 필요합니다.
도움이 되었는지 알려주세요.