GKE测试环境创建HTTPS Ingress遇证书及请求超时问题求助
一、无域名时的HTTPS Ingress简便方案
你之前碰到的证书IP不匹配问题,核心原因是公共CA(比如Let's Encrypt)本质上是为域名签发证书的,直接给IP签的证书不仅浏览器普遍不信任,还需要特殊流程,测试环境完全没必要折腾。更简单的方案是用「静态Ingress IP + 自签名证书」:
先固定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就不会变了。生成针对静态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」替换成它。
把证书存成Kubernetes Secret
kubectl create secret tls my-ingress-tls-secret --key tls.key --cert tls.crt更新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

