如何在GKE节点池中的节点上禁用SSH



我正在is-central1-b us-central-1-c和us-centrall-f中运行一个区域性GKE kubernetes集群。我跑了1.21.14公斤。我使用此命令将一个机密节点池添加到集群中。

gcloud container node-pools create card-decrpyt-confidential-pool-1 
--cluster=svcs-dev-1 
--disk-size=100GB 
--disk-type=pd-standard 
--enable-autorepair 
--enable-autoupgrade 
--enable-gvnic 
--image-type=COS_CONTAINERD 
--machine-type="n2d-standard-2" 
--max-pods-per-node=8  
--max-surge-upgrade=1 
--max-unavailable-upgrade=1 
--min-nodes=4 
--node-locations=us-central1-b,us-central1-c,us-central1-f 
--node-taints=dedicatednode=card-decrypt:NoSchedule 
--node-version=1.21.14-gke.700 
--num-nodes=4 
--region=us-central1 
--sandbox="type=gvisor" 
--scopes=https://www.googleapis.com/auth/cloud-platform 
--service-account="card-decrpyt-confidential@corp-dev-project.iam.gserviceaccount.com" 
--shielded-integrity-monitoring 
--shielded-secure-boot 
--tags=testingdonotuse 
--workload-metadata=GKE_METADATA 
--enable-confidential-nodes

这会创建一个节点池,但有一个问题。。。我仍然可以SSH到节点池创建的实例。这对于我的用例来说是不可接受的,因为这些节点池需要尽可能安全。我进入我的节点池,使用一个基于为我的节点库创建的实例模板创建了一个关闭ssh的新机器模板。

gcloud compute instance-templates create card-decrypt-instance-template 
--project=corp-dev-project
--machine-type=n2d-standard-2 
--network-interface=aliases=gke-svcs-dev-1-pods-10a0a3cd:/28,nic-type=GVNIC,subnet=corp-dev-project-private-subnet,no-address
--metadata=block-project-ssh-keys=true,enable-oslogin=true 
--maintenance-policy=TERMINATE --provisioning-model=STANDARD 
--service-account=card-decrpyt-confidential@corp-dev-project.iam.gserviceaccount.com 
--scopes=https://www.googleapis.com/auth/cloud-platform 
--region=us-central1 --min-cpu-platform=AMD Milan
--tags=testingdonotuse,gke-svcs-dev-1-10a0a3cd-node 
--create-disk=auto-delete=yes,boot=yes,device-name=card-decrpy-instance-template,image=projects/confidential-vm-images/global/images/cos-89-16108-766-5,mode=rw,size=100,type=pd-standard 
--shielded-secure-boot 
--shielded-vtpm -
-shielded-integrity-monitoring 
--labels=component=gke,goog-gke-node=,team=platform --reservation-affinity=any

当我更改节点池中节点的实例模板时,新实例会联机,但它们不会附加到节点池。集群总是试图自我修复,在删除池中的所有节点之前,我无法更改任何设置。我没有收到任何错误。

我需要做些什么来禁用ssh到具有我创建的原始节点池或新实例模板的节点池节点中。我已经尝试了一系列不同的配置,包括新的节点池和集群,但没有任何运气。我尝试过不同的标签网络配置和图像。这些都没有奏效。

其他信息:该群集最初不是机密群集。机密节点是第一个添加到集群中的此类节点。

这里的一个选项是为集群中的节点启用专用IP地址。--enable-private-nodes标志将使集群中的节点获得私有IP地址(而不是默认的公共、面向互联网的IP地址(。

请注意,在这种情况下,您仍然可以通过SSH连接到这些节点,但只能从VPC网络中连接。

请注意,这意味着您将无法从VPC网络之外访问NodePort类型的服务。相反,您需要使用LoadBalancer类型的服务(或者如果需要,提供一些其他方式将流量从集群外部路由到您的服务(。


如果您想阻止SSH访问,即使是在您的VPC网络中,您最简单的选择可能是配置防火墙规则来拒绝SSH流量到您的节点(TCP/UDP/SCTP端口22(。使用网络标签(--tags标志(以GKE节点为目标。

大致如下:

gcloud compute firewall-rules create fw-d-i-ssh-to-gke-nodes 
--network NETWORK_NAME 
--action deny 
--direction ingress 
--rules tcp:22,udp:22,sctp:22 
--source-ranges 0.0.0.0/0 
--priority 65534 
--target-tags my-gke-node-network-tag

最后,我要提到的最后一个创建强化GKE集群的选项是使用Google的safer-clusterTerraform模块。这是一个有主见的GKE集群设置,遵循了谷歌集群强化指南中列出的许多原则,Terraform模块处理了这里的许多细节样板。

创建节点池时需要元数据标志--metadata=块项目ssh密钥=TRUE\

这阻止了ssh。但是,enable-os-login=false不起作用,因为它是为Kubernetes引擎保留的

相关内容

  • 没有找到相关文章

最新更新