防火墙后面的私有 GKE 集群从外部 IP 获取调用

Private GKE cluster behind firewall getting calls from external IP

尽管我们的集群是私有的,并且在 gcp 防火墙后面有一条规则阻止除 IAP IP(和 ICMP)之外的所有入口,但我们正在获取对 k8s 的调用的日志。我错过了什么?

"protoPayload":{
   "@type":"type.googleapis.com/google.cloud.audit.AuditLog"
   "authenticationInfo":{
      "principalEmail":"system:anonymous"
   }
   "authorizationInfo":["0":{2}]
   "methodName":"io.k8s.post"
   "requestMetadata":{
      "callerIp":"45.*.*.*"
      "callerSuppliedUserAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
   }
   "resourceName":"Autodiscover/Autodiscover.xml"
   "serviceName":"k8s.io"
   "status":{
      "code":"7"
      "message":"Forbidden"
   }
}

私有集群有一个控制平面私有端点和一个控制平面public端点,您可以选择禁用控制平面public端点,这是最高级别的限制访问。因此,您可以使用 kubectl 等工具使用私有端点内部 IP 地址管理集群,并且任何使用同一子网的 VM 集群也可以访问私有 endpoint.However,重要的是要说,即使您禁用public 端点访问,Google 可以使用控制平面 public 端点进行集群管理,例如定期维护和自动控制平面升级。 如果您需要更多关于如何创建私有集群并禁用public端点的信息,您可以参考以下public document.

您可以使用以下命令查看您的 public 端点:

gcloud container clusters describe YOUR_CLUSTER_NAME

此外,您可以使用以下命令验证集群的节点是否没有外部 IP 地址:

kubectl get nodes --output wide