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

GKE测试环境创建HTTPS Ingress遇证书及请求超时问题求助

解决GKE测试环境HTTPS Ingress的两个核心问题

一、无域名时的HTTPS Ingress简便方案

你之前碰到的证书IP不匹配问题,核心原因是公共CA(比如Let's Encrypt)本质上是为域名签发证书的,直接给IP签的证书不仅浏览器普遍不信任,还需要特殊流程,测试环境完全没必要折腾。更简单的方案是用「静态Ingress IP + 自签名证书」:

  1. 先固定Ingress的IP(关键!)
    默认GKE Ingress的IP是临时的,重启就会变,所以先创建一个静态全局IP:

    gcloud compute addresses create my-ingress-static-ip --global
    

    然后获取这个IP:

    gcloud compute addresses describe my-ingress-static-ip --global --format="value(address)"
    

    在你的Ingress YAML里添加spec.loadBalancerIP字段,把静态IP填进去,这样Ingress创建后IP就不会变了。

  2. 生成针对静态IP的自签名证书
    用OpenSSL生成一个只对这个IP有效的证书(测试环境足够用):

    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=你的静态IP" -addext "subjectAltName=IP:你的静态IP"
    

    比如你的IP是35.241.60.223,就把命令里的「你的静态IP」替换成它。

  3. 把证书存成Kubernetes Secret

    kubectl create secret tls my-ingress-tls-secret --key tls.key --cert tls.crt
    
  4. 更新Ingress配置启用HTTPS
    在Ingress的spec里添加tls段:

    spec:
      tls:
        - hosts:
            - 35.241.60.223  # 填你的静态IP
          secretName: my-ingress-tls-secret
      # 其他原有的rules和loadBalancerIP配置...
    

    应用这个配置后,浏览器访问时会提示证书不受信任,这是正常的(自签名证书的特性),测试环境手动添加信任即可。

二、用域名comanddev.tk后遇到的ERR_TIMEDOUT和401问题排查

你后来绑定域名后出现超时和健康检查401,按以下步骤排查:

1. 先确认域名解析是否正确

用nslookup comanddev.tk或者dig comanddev.tk验证,确保域名确实指向了你的Ingress IP(35.241.60.223)。如果解析不对,先修正DNS记录,注意DNS生效可能需要几分钟到几小时的缓存时间。

2. 检查GCP防火墙规则

GKE Ingress需要允许外部的443端口流量进入,去GCP控制台的「VPC网络 > 防火墙」,查看是否有一条针对GKE集群的规则,允许0.0.0.0/0访问443端口。如果没有,手动创建一条:

  • 目标:指定你的GKE集群节点标签(比如gke-<集群名>-node)
  • 协议和端口:勾选TCP 443
  • 来源IP范围:0.0.0.0/0

3. 解决健康检查401的问题

Ingress Controller日志里的401是GKE的健康检查请求返回的——GKE默认的健康检查不会带任何认证信息,但你的/customer-service/actuator/health端点需要认证。测试环境可以临时关闭Actuator的认证:
在Spring Boot的application.yml里添加:

management:
  security:
    enabled: false
  endpoints:
    web:
      exposure:
        include: health

如果不想关闭认证,也可以在Ingress的后端配置里自定义健康检查的请求头(比如添加Authorization),不过测试环境关闭认证更简便。

4. 检查Ingress和后端服务状态

运行kubectl describe ingress <你的Ingress名称>,看Events里有没有报错,比如证书是否成功关联、后端Service的Endpoints是否就绪(如果Endpoints是0,说明Pod没正常运行)。再用kubectl get pods确认你的customer-service Pod是否正常启动。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:38:12