You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pulumi配置带Google托管SSL证书的GKE Ingress创建卡住求助

问题排查&修正点

1. 后端Service类型配置错误

GCE Ingress仅需要NodePort类型的后端服务即可完成负载均衡转发,你当前配置的LoadBalancer类型会额外创建独立公网LB,会干扰Ingress控制器的资源调度逻辑,这是Ingress创建卡住最常见的原因之一,直接把服务的spec.type改为NodePort即可。

2. 多余的ConfigMap配置冲突

你手动创建的managed-certificate-configConfigMap完全不需要,GKE内置的托管证书控制器会自动处理证书与Ingress的绑定同步,手动写入的配置会和控制器默认逻辑冲突,直接删除该ConfigMap资源以及Ingress对它的依赖即可。

3. Ingress配置冗余&版本兼容问题

  • 你使用的networking.k8s.io/v1beta1Ingress版本在K8s 1.19+版本已废弃,建议替换为networking.k8s.io/v1适配当前主流GKE集群版本。
  • 注解ingress.gcp.kubernetes.io/pre-shared-cert是给用户自行上传的预共享证书使用的,使用Google托管证书仅需要保留networking.gke.io/managed-certificates注解即可,两个注解同时存在会导致证书匹配冲突。
  • 不需要额外配置tls块,托管证书会自动匹配规则里的域名,直接删除tls配置块即可。

4. 依赖链优化

Ingress不需要等待证书完全签发完成再创建,控制器会自动轮询证书状态,完成后自动绑定,去掉不必要的依赖可以加快部署进度。


修正后的最小可用示例

const authDeploymentService = new k8s.core.v1.Service(authDeploymentName,
    {
        metadata: {
            name: "auth-svc",
            labels: authDeploymentAppLabels,
            namespace: namespaceName,
        },
        spec: {
            type: "NodePort", // 改为NodePort类型
            ports: [{ port: 80, targetPort: 8080 }],
            selector: authDeploymentAppLabels,
        },
    },
    {
        provider: clusterProvider,
        dependsOn: [authDeployment]
    }
);

const authServiceManagedCert = new gcp.compute.ManagedSslCertificate("auth-cert-001", {
    name: "auth-cert-001",
    project: myGcpProject.projectId,
    description: "Managed SSL Certificate For auth service",
    managed: {
        domains: ["mydomain.com"]
    }
});

const ingress = new k8s.networking.v1.Ingress(authDeploymentName + "-ingress", {
    metadata: {
        namespace: namespaceName,
        annotations: {
            // 仅保留托管证书注解
            "networking.gke.io/managed-certificates": authServiceManagedCert.name
        }
    },
    spec: {
        ingressClassName: "gce",
        defaultBackend: {
            service: {
                name: authDeploymentService.metadata.name,
                port: { number: 80 }
            }
        },
        rules: [
            {
                host: "mydomain.com",
                http: {
                    paths: [
                        {
                            path: "/",
                            pathType: "Prefix",
                            backend: {
                                service: {
                                    name: authDeploymentService.metadata.name,
                                    port: { number: 80 }
                                }
                            },
                        }
                    ],
                },
            },
        ]
    }
},
{
    provider: clusterProvider,
    dependsOn: [authDeploymentService] // 仅依赖后端服务即可
});

若部署后仍卡住可执行以下命令排查原因

  • 查看Ingress事件:kubectl describe ingress <ingress名称> -n <命名空间>
  • 查看托管证书状态:kubectl get managedcertificate -A

内容的提问来源于stack exchange,提问作者Vikram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:36:03