GKE集群中如何让Kubernetes HTTPS服务公网可访问?
GKE集群实现Nginx Ingress公网HTTPS访问方案
1. 确认Ingress Controller的公网入口IP
GKE上部署的Nginx Ingress Controller如果使用LoadBalancer类型的Service,GCP会自动分配一个公网IP。执行以下命令查看:
kubectl get svc -n ingress-nginx
找到ingress-nginx-controller服务的EXTERNAL-IP字段,这个就是公网访问的入口IP。如果你的Service是NodePort或ClusterIP类型,需要修改为LoadBalancer才能获取公网IP:
# 修改ingress-nginx-controller的Service配置 apiVersion: v1 kind: Service metadata: name: ingress-nginx-controller namespace: ingress-nginx spec: type: LoadBalancer # 保留其他原有配置
2. 绑定域名到公网IP
你需要拥有一个公网域名(如app.yourdomain.com),在域名服务商的DNS管理后台添加一条A记录,将该域名指向上述的Ingress公网IP。等待DNS解析生效(通常5-30分钟),可通过nslookup app.yourdomain.com验证解析是否正确。
3. 配置HTTPS证书(推荐Cert-Manager自动签发)
安装Cert-Manager
先在GKE集群中安装Cert-Manager的CRDs和控制器,可通过Cert-Manager官方发布的静态YAML文件进行安装(选择最新稳定版即可)。安装完成后执行以下命令验证部署状态:
kubectl wait --for=condition=available deployment --timeout=600s -n cert-manager cert-manager
创建ClusterIssuer(对接Let's Encrypt)
创建一个ClusterIssuer资源,用于自动申请免费的Let's Encrypt证书:
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: your-email@example.com # 替换为你的邮箱,用于证书过期通知 privateKeySecretRef: name: letsencrypt-prod solvers: - http01: ingress: class: nginx
更新Ingress资源启用HTTPS
修改你现有的Ingress配置,添加TLS配置和Cert-Manager注解:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: your-app-ingress annotations: cert-manager.io/cluster-issuer: "letsencrypt-prod" nginx.ingress.kubernetes.io/ssl-redirect: "true" # 自动将HTTP请求重定向到HTTPS spec: ingressClassName: nginx tls: - hosts: - app.yourdomain.com # 替换为你的绑定域名 secretName: app-tls-secret # Cert-Manager会自动创建这个Secret存储证书 rules: - host: app.yourdomain.com http: paths: - path: / pathType: Prefix backend: service: name: your-app-service # 替换为你的应用Service名称 port: number: 80
应用配置后,Cert-Manager会自动完成证书申请、签发和挂载,整个过程通常需要1-2分钟。
4. 验证公网HTTPS访问
证书签发完成后,直接在浏览器访问https://app.yourdomain.com,浏览器会显示安全的HTTPS标识。也可以用curl验证:
curl -v https://app.yourdomain.com
内容的提问来源于stack exchange,提问作者Aishvarya Suryawanshi
相关产品推荐
相关产品推荐

