我创建了一个 GKE 私有集群 (版本:1.13.6-gke.13)使用以下命令:
gcloud container clusters create a-cluster-with-user-pass \
--network vpc-name \
--subnetwork subnet-name \
--enable-master-authorized-networks \
--username random \
--password averylongpassword \
--enable-ip-alias \
--enable-private-nodes \
--enable-private-endpoint \
--master-ipv4-cidr xxx.xx.xx.xx/28 \
--cluster-version 1.13.6-gke.13 \
--num-nodes 2 \
--zone asia-south1-a
我可以看到端口 (10255) 在上述集群中创建的两个节点(或者我们可以说 GCP 计算实例)中均已打开。
如果我创建一个简单的 GCP 计算实例(因此我总共有 3 个虚拟机实例)并尝试从此虚拟机的 10255 端口上访问 GKE 节点的内部 IP,我无需任何身份验证或授权即可访问它。
以下是用于创建 GCP 计算实例的命令:
gcloud compute instances create vm-name \
--network vpc-name \
--subnetwork subnet-name \
--zone asia-south1-a
如果我发送一个简单的 CURL GET 请求到 (xxx.xx.xx.xx:10255/pods)我获得了大量有关 Pod 和应用程序的信息。
正如我在 Kubernetes 文档中看到的here https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/,其中提到:
--read-only-port int32
The read-only port for the Kubelet to serve on with no authentication/authorization (set to 0 to disable) (default 10255)
我尝试通过编辑禁用端口kube-config.yaml
通过执行以下操作在节点中创建文件ssh
并重新启动 kubelet,我成功了。但这是一个好方法吗?我相信当xxx.xx.xx.xx:10255/指标被禁用。有办法保护端口吗?而不是禁用它?
我看到这个github问题 https://github.com/kubernetes/kubernetes/issues/44330我确信有一种方法可以保护这个端口。我不知道该怎么做。
我看到 Kubernetes 文档总体上为我们提供了多种保护端口的方法。如何在 Google Kubernetes Engine 中做到这一点?