Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保护Google Kubernetes引擎(GKE)中的只读端口10255?_Kubernetes_Google Cloud Platform_Google Kubernetes Engine_Kubelet - Fatal编程技术网

如何保护Google Kubernetes引擎(GKE)中的只读端口10255?

如何保护Google Kubernetes引擎(GKE)中的只读端口10255?,kubernetes,google-cloud-platform,google-kubernetes-engine,kubelet,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,Kubelet,我使用以下命令创建了一个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 \ --ena

我使用以下命令创建了一个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个VM实例),并尝试从这个VM访问10255端口上GKE节点的内部IP,我就能够在没有任何身份验证或授权的情况下访问它。 下面是用于创建GCP计算实例的命令:

gcloud compute instances create vm-name \
 --network vpc-name \
 --subnetwork subnet-name    \
 --zone asia-south1-a
如果我向(xxx.xx.xx.xx:10255/pods)发送一个简单的CURL-GET请求,我将获得大量关于pods和应用程序的信息。 正如我在Kubernetes的文件中所看到的,其中提到:

--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/metrics时可能会出现多个问题。有没有办法确保港口安全?而不是禁用它

我看到了这一点,我确信有一种方法可以确保这个港口的安全。我不知道该怎么做


我看到Kubernetes文档通常为我们提供了多种保护端口的方法。如何在Google Kubernetes引擎中实现这一点?

Kubelet正在使用此端口公开收集的节点度量。如果没有公开这些指标,可能会导致意外行为,因为系统基本上是盲目的

由于GKE是一个托管系统,您不需要调整kubelet标志,因为当重新创建节点时,设置将重置(节点基于GCE模板,不包括您自己的配置)


至于安全性,我认为保持该端口不变是安全的,因为您使用的是私有集群,这意味着只有同一VPC中的资源才允许到达节点。

正如Yahir Hernández在回答中所建议的,该端口用于公开与系统相关的指标,以确保顺利运行。禁用此端口可能不是一个好主意

我们需要做的是阻止从VPC外部访问此端口

因为您正在GCP上使用GKE。如果您使用的是VPC,则可以将防火墙规则添加到端口(10255),以仅允许来自VPC上资源的传入流量。禁用从internet访问此端口。

根据第196页和第197页“建议”>“Kubelet”:

  • 建议(广泛适用,应适用于几乎所有环境)禁用只读端口10255
  • 您可以通过编辑kubelet配置文件将
    readOnlyPort
    设置为
    0
    ,然后重新启动
    kubelet
    服务来完成此操作
同时,(第4.2.4点)默认情况下未禁用端口,因为:

一些GKE监控组件使用kubelet只读端口来获取度量



但是,是否有一种方法至少可以向端点添加身份验证或授权,以便不是所有VM都可以访问端点,而是只有允许的VM可以访问端点?正如其他响应中所建议的,您可以添加VPC级别的防火墙规则来禁用访问。请记住,GKE集群中的所有节点都有IP地址,这可能会使防火墙操作更容易。如果仔细观察,我创建的集群只有内部IP地址,默认情况下无法从VPC外部访问。事实上,私有集群甚至不能被同一VPC中另一个子网中的虚拟机访问。因此,我不关心来自专有网络或子网之外的流量。我担心来自同一子网中VM的流量。这些没有任何作用域或身份验证的虚拟机只需发送GET请求即可访问此端口。我想在里面加上身份验证。你想解决的问题是什么?为什么你会有来自虚拟机的流量,因为只有你的吊舱会在里面运行?我试图解决的问题与安全有关。假设同一子网中有一个VM,它是为了其他目的而创建的,而不是为了访问集群。即使没有任何授权和身份验证,GKE也允许VM访问此端口并获取大量信息。那么它不应该位于不同的子网中吗?如果不是,请尝试阻止从VM到端口10255的传出流量。我想到了这个解决方案,但仅为集群创建一个子网对我来说似乎太过分了。而且,
阻止从VM到端口10255的传出流量
看起来并不是一个好的解决方案。如果重新创建集群并且IP发生更改,该怎么办?如果同一子网中有另一个群集访问其他群集IP:10255,该怎么办?因此,我宁愿保护目标,而不是限制调用方。