运维部署
在 GKE 上配置边缘网络、流量路由…
在 GKE 上通过 Gateway API、Ingress、Cloud Armor、NEG、PSC 和托管证书安全地对外或对内暴露应用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在 GKE 上配置边缘网络、流量路由、负特定
解决思路
- 使用 Gateway API(推荐):确认集群已启用 Gateway API(GKE 1.26+ 新集群默认启用,旧版本用 `--gateway-api=standard` 启用),然后应用 `assets/gateway.yaml`(使用 `gke-l7-global-external-managed` GatewayClass 的外部 Gateway 与 HTTP 监听器)和 `assets/httproute.yaml`(通过 `parentRefs` 关联 Gateway,将路径前缀路由到 Service 的 `backendRef`),执行 `kubectl apply -f assets/gateway.yaml` 与 `kubectl apply -f assets/httproute.yaml`。
- 使用 HTTPRoute 的加权流量拆分做金丝雀发布:在 `spec.rules[].backendRefs` 中为多个后端 Service 设置 `weight`(如 app-v1 为 90、app-v2 为 10),模板见 `assets/httproute-traffic-split.yaml`。
- 使用标准 GKE Ingress:对简单或遗留场景应用 `assets/ingress.yaml`,通过 `kubernetes.io/ingress.class: "gce"` 注解使用 GCE Ingress 路由到 Service。
- 用 Cloud Armor 加固:先用 `gcloud compute security-policies create {security_policy_name} --description "WAF policy for {app_name}"` 创建安全策略,再用 `gcloud compute security-policies rules create 1000 --security-policy {security_policy_name} --action deny-403 --src-ip-ranges "203.0.113.0/24" --description "Block abusive range"` 添加规则。
- 在 `BackendConfig`(`assets/backendconfig.yaml`)中设置 `spec.securityPolicy.name` 引用该安全策略,并在 Service 的 `metadata.annotations` 中通过 `cloud.google.com/backend-config: '{"default": "{backend_config_name}"}'` 或按端口映射 `cloud.google.com/backend-config: '{"ports": {"80": "{backend_config_name}"}}'` 关联。
- 配置 Google 托管 SSL 证书(旧版 Ingress):应用 `assets/managed-certificate.yaml`(列出域名的 `ManagedCertificate`),并在 Ingress 注解中通过 `networking.gke.io/managed-certificates: {certificate_name}` 引用。
- 配置 Google 托管 SSL 证书(Gateway API):创建 `CertificateMap`,并在 Gateway 的 `metadata.annotations` 中使用严格拼写的 `networking.gke.io/certmap: {certificate_map_name}`(不要写成 `cert-map` 或 `certificate-map`);也可在 HTTPS 监听器的 `tls.certificateRefs` 中引用 Kubernetes Secret,两种写法见 `assets/gateway-https.yaml`。
- 启用容器原生负载均衡(推荐,需 VPC-native 集群):在 Service 的 `metadata.annotations` 中设置 `cloud.google.com/neg: '{"ingress": true}'`,触发创建镜像 Pod IP 的 NEG,使负载均衡器直接指向 Pod 而非节点。
- 判断何时无需手动添加 NEG 注解:Internal Ingress 始终使用容器原生负载均衡(始终使用 `GCE_VM_IP_PORT` NEG,需 VPC-native 集群);External Ingress 仅在集群同时满足 VPC-native、非 Shared VPC、未使用 GKE Network Policy、启用 `HttpLoadBalancing` 附加组件(默认开启,勿禁用)四个条件时由 GKE 自动添加注解。
- 判断何时必须显式添加 NEG 注解:独立 NEG(自行管理负载均衡器,Ingress 会在同步或升级时覆盖托管负载均衡器设置,此时需自行负责负载均衡器所有部分);任何不满足上述四个条件的 External Ingress 集群(Shared VPC、GKE Network Policy 或非 VPC-native),需按 Service 启用;部分在 VPC-native 集群上创建的旧版 External Ingress 对象仍使用实例组后端。
- 注意 NEG 不支持的情况:Windows Server 节点池;基于路由(非 VPC-native)集群的 External Ingress 会回退到跨所有节点的非托管实例组。
- 注意规模影响:无 NEG 时集群上限为 1,000 个节点,超过后 Ingress 后的非 NEG Service 将无法正常工作;使用 NEG 则无 GKE 节点数限制。
- 配置 Private Service Connect(PSC):先为工作负载创建内部 LoadBalancer Service(`type: LoadBalancer` 且带 `networking.gke.io/load-balancer-type: "Internal"` 注解,这是 `ServiceAttachment` 的前提,ClusterIP 或外部 LoadBalancer Service 不可用),再创建引用该 Service 的 `ServiceAttachment`(`assets/service-attachment.yaml`,设置 `connectionPreference`、PSC NAT 子网和 Service 的 `resourceRef`),最后将 `ServiceAttachment` URI 分享给消费者,在其 VPC 中创建 PSC 端点。
- 配置拓扑感知路由以降低跨区流量成本与延迟:在 Service 的 `metadata.annotations` 中设置 `service.kubernetes.io/topology-mode: auto`,将流量路由到与客户端同区的 Pod。
- 注意证书管理器 API 必须启用:`gcloud services enable certificatemanager.googleapis.com`,否则 `networking.gke.io/certmap` 注解无法工作,Gateway 无法配置证书映射。
- 注意区域 Gateway 类需要仅代理子网:`gke-l7-regional-external-managed` 和 `gke-l7-rilb` 等类需要该区域内带 `--purpose=REGIONAL_MANAGED_PROXY` 的子网,否则 Gateway 无法编程。
- 注意 ManagedCertificate 签发依赖 DNS:在域名的 A/AAAA 记录指向负载均衡器 IP 之前证书会停留在 `Provisioning`,DNS 正确后还需 15-60 分钟。
适用边界 · 注意事项
- 不要用于核心集群 IP 规划、Dataplane V2 网络策略或节点 NAT 出口(应使用 gke-networking)。
- Windows Server 节点池不支持 NEG,无法使用容器原生负载均衡。
- 基于路由(非 VPC-native)集群的 External Ingress 会回退到非托管实例组,无法使用 NEG。