无法从另一个 VM 执行 Kubectl 命令
Kubectl commands cannot be executed from another VM
我在执行“kubectl”命令时遇到问题。事实上,我的集群由一个 Master 和一个 Worker 节点组成。 kubectl 命令可以从主服务器执行而不会出现问题。但是,我还有另一个 VM,我将该 VM 用作跳转服务器以登录到主节点和工作节点。我需要从该 Jump 服务器执行 kubectl 命令。我创建了 .kube 目录,并将 kubeconfig 文件从主节点复制到跳转服务器。而且我也正确设置了上下文。但是 kubectl 命令在从 Jump 服务器执行时挂起并给出超时错误。
信息如下。
kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://10.240.0.30:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
ubuntu@ansible:~$ kubectl config use-context kubernetes-admin@kubernetes
Switched to context "kubernetes-admin@kubernetes".
ubuntu@ansible:~$ kubectl get pods
Unable to connect to the server: dial tcp 10.240.0.30:6443: i/o timeout
ubuntu@ansible:~$ kubectl config current-context
kubernetes-admin@kubernetes
对我来说似乎一切正常,想知道为什么 kubectl 命令在从 Jump 服务器执行 wx 时挂起。
通过执行以下命令验证 Jump VM 是否可以 telnet 到 Kubernetes 主节点来解决问题。
telnet <ip-address-of-the-kubernetes-master-node> 6443
由于错误是 “连接超时”,我不得不向 Kubernetes 主节点添加防火墙规则。添加了如下防火墙规则。 注意:在我的例子中,我使用的是 GCP。
gcloud compute firewall-rules create allow-kubernetes-apiserver \
--allow tcp:22,tcp:6443,icmp \
--network kubernetes \
--source-ranges 0.0.0.0/0
然后我可以毫无问题地远程登录到主节点。如果仍然无法连接到Master节点,请将.kube目录下kubconfig文件中的Internal IP修改为PublicMaster节点的IP地址。
然后使用以下命令更改上下文。
kubectl config set-context <context-name>
我在执行“kubectl”命令时遇到问题。事实上,我的集群由一个 Master 和一个 Worker 节点组成。 kubectl 命令可以从主服务器执行而不会出现问题。但是,我还有另一个 VM,我将该 VM 用作跳转服务器以登录到主节点和工作节点。我需要从该 Jump 服务器执行 kubectl 命令。我创建了 .kube 目录,并将 kubeconfig 文件从主节点复制到跳转服务器。而且我也正确设置了上下文。但是 kubectl 命令在从 Jump 服务器执行时挂起并给出超时错误。
信息如下。
kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://10.240.0.30:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
ubuntu@ansible:~$ kubectl config use-context kubernetes-admin@kubernetes
Switched to context "kubernetes-admin@kubernetes".
ubuntu@ansible:~$ kubectl get pods
Unable to connect to the server: dial tcp 10.240.0.30:6443: i/o timeout
ubuntu@ansible:~$ kubectl config current-context
kubernetes-admin@kubernetes
对我来说似乎一切正常,想知道为什么 kubectl 命令在从 Jump 服务器执行 wx 时挂起。
通过执行以下命令验证 Jump VM 是否可以 telnet 到 Kubernetes 主节点来解决问题。
telnet <ip-address-of-the-kubernetes-master-node> 6443
由于错误是 “连接超时”,我不得不向 Kubernetes 主节点添加防火墙规则。添加了如下防火墙规则。 注意:在我的例子中,我使用的是 GCP。
gcloud compute firewall-rules create allow-kubernetes-apiserver \
--allow tcp:22,tcp:6443,icmp \
--network kubernetes \
--source-ranges 0.0.0.0/0
然后我可以毫无问题地远程登录到主节点。如果仍然无法连接到Master节点,请将.kube目录下kubconfig文件中的Internal IP修改为PublicMaster节点的IP地址。
然后使用以下命令更改上下文。
kubectl config set-context <context-name>