Kubernetes未给Ingress分配地址 按官方教程配置后访问返回404
问题排查与解决步骤
1. 修复Ingress无Address的异常
你使用的minikube 1.23版本搭配k8s 1.22版本,存在ingress-nginx控制器的RBAC权限兼容问题,执行以下命令补全权限即可:
kubectl patch clusterrole ingress-nginx -n ingress-nginx --type=json -p='[{"op": "add", "path": "/rules/-", "value": {"apiGroups": [""],"resources": ["services", "endpoints", "secrets"],"verbs": ["get", "list", "watch"]}},{"op": "add", "path": "/rules/-", "value": {"apiGroups": ["extensions", "networking.k8s.io"],"resources": ["ingresses"],"verbs": ["get", "list", "watch"]}},{"op": "add", "path": "/rules/-", "value": {"apiGroups": ["networking.k8s.io"],"resources": ["ingresses/status"],"verbs": ["update"]}}]'
执行完成后等待2分钟,再执行kubectl get ingress查询,Address字段就会正常显示minikube的IP地址。
2. 修复访问返回404的异常
你配置的nginx.ingress.kubernetes.io/rewrite-target: /$1注解和当前Ingress的路径规则不匹配:
你当前的Ingress路径配置为/,不需要带占位符的重写规则,将注解修改为nginx.ingress.kubernetes.io/rewrite-target: /即可。同时注意k8s 1.22版本要求Ingress必须指定pathType字段,否则规则不会生效,完整的参考配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: hello-world.info http: paths: - path: / pathType: Prefix backend: service: name: web port: number: 8080
3. default backend报错说明
该报错不影响你自定义规则的正常访问,minikube内置的ingress-nginx默认没有部署default-http-backend组件,只有访问未匹配规则的域名路径时才会调用默认后端,你当前配置的hello-world.info规则不受该报错影响。
修改配置后重新apply Ingress资源,等待1分钟再访问hello-world.info即可正常返回内容。
内容的提问来源于stack exchange,提问作者Digao
相关产品推荐
相关产品推荐

