Kubernetes Ingress问题:Ingress到ClusterIP Service路由失效
问题分析:WordPress访问域名被重定向到IP地址
核心问题点
1. Ingress配置存在语法错误
你的Ingress规则中,同一个backend服务下重复定义了port字段,Kubernetes会仅保留最后一个配置(即443端口)。但你的WordPress Service的443端口实际是转发到容器的80端口,且未配置TLS证书,这会导致Ingress处理请求时出现异常,进而触发重定向。
错误配置片段:
backend: service: name: wordpress-frontend-service port: number: 80 port: number: 443
2. WordPress站点地址未强制指定
WordPress默认会根据首次访问的地址,自动将siteurl和home字段写入数据库的wp_options表。如果你的WordPress Pod首次启动后是通过IP(192.168.210.200)访问的,数据库中会留存这个IP地址,后续即使通过域名test.com访问,WordPress也会自动重定向到数据库中记录的IP。
另外,你没有在WordPress的环境变量中指定WORDPRESS_SITEURL和WORDPRESS_HOME,这两个变量可以强制WordPress使用指定域名作为站点地址,避免自动生成的IP导致重定向。
解决方案
步骤1:修复Ingress配置
修改Ingress规则,去掉重复的port字段,根据需求选择HTTP或HTTPS配置:
方案A:使用HTTP(快速验证)
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: wordpress name: wordpress-ingress labels: app: wordpress spec: rules: - host: test.com http: paths: - path: / pathType: Prefix backend: service: name: wordpress-frontend-service port: number: 80
方案B:启用HTTPS(需提前创建证书Secret)
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: wordpress name: wordpress-ingress labels: app: wordpress spec: tls: - hosts: - test.com secretName: test-tls-secret # 替换为你的证书Secret名称 rules: - host: test.com http: paths: - path: / pathType: Prefix backend: service: name: wordpress-frontend-service port: number: 80
应用修改后的Ingress配置:
kubectl apply -f your-ingress-file.yaml -n wordpress
步骤2:配置WordPress站点地址
方法A:通过环境变量设置(推荐)
修改wordpress-creds Secret,添加WORDPRESS_SITEURL和WORDPRESS_HOME字段:
- 对
http://test.com进行base64编码:
echo -n "http://test.com" | base64
- 更新Secret配置:
apiVersion: v1 kind: Secret metadata: name: wordpress-creds namespace: wordpress type: Opaque data: WORDPRESS_DB_HOST: d29yZHByZXNzLW15c3FsLXNlcnZpY2U= WORDPRESS_DB_USER: ZXhhbXBsZWRhdGE= WORDPRESS_DB_PASSWORD: ZXhhbXBsZWRhdGE= WORDPRESS_DB_NAME: ZXhhbXBsZWRhdGE= WORDPRESS_SITEURL: aHR0cDovL3Rlc3QuY29t # 替换为上面生成的编码值 WORDPRESS_HOME: aHR0cDovL3Rlc3QuY29t # 同上
- 应用更新并重启WordPress Pod:
kubectl apply -f your-wordpress-secret.yaml -n wordpress kubectl rollout restart deployment wordpress-frontend-deployment -n wordpress
方法B:直接修改数据库
如果无法通过环境变量修改,可进入MySQL Pod调整记录:
- 进入MySQL Pod:
kubectl exec -it <mysql-pod-name> -n wordpress -- bash
- 登录MySQL并切换到目标数据库:
mysql -u root -p # 输入密码(明文为example data) USE example_data;
- 更新站点地址:
UPDATE wp_options SET option_value = 'http://test.com' WHERE option_name = 'siteurl'; UPDATE wp_options SET option_value = 'http://test.com' WHERE option_name = 'home';
- 退出并重启WordPress Pod:
EXIT; exit kubectl rollout restart deployment wordpress-frontend-deployment -n wordpress
步骤3:验证结果
清除浏览器缓存后重新访问test.com,确认重定向问题已解决。
内容的提问来源于stack exchange,提问作者Adam Stiller
相关产品推荐
相关产品推荐

