Helm部署Ingress Controller自定义路径未添加问题求助
操作步骤
- 创建Helm Chart:
helm create ingress
- 删除
templates文件夹内所有文件,清空values.yaml,编写新的Chart.yaml:
apiVersion: v2 name: ingress description: A Helm chart for Ingress Controller type: application version: 1.1.0 appVersion: 1.17.0 keywords: - ingress - nginx - api-gateway maintainers: - name: Harry dependencies: - name: nginx-ingress version: 0.15.1 repository: https://helm.nginx.com/stable
- 更新依赖生成tgz文件:
helm dependency update
- 在
templates目录下创建ingress.yaml模板:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: {{ .Values.ingress.name }} annotations: kubernetes.io/ingress.class: {{ .Values.ingress.annotations.class }} spec: rules: {{- range .Values.ingress.hosts }} - host: {{ .host | quote }} http: paths: {{- range .paths }} - path: {{ .path }} pathType: Prefix backend: service: name: {{ .backend.serviceName }} port: number: {{ .backend.servicePort }} {{- end }} {{- end }}
- 编写默认
values.yaml:
ingress: name: ingress-service replicaCount: 1 annotations: class: nginx hosts: - host: chart-example.local paths: - path: / backend: serviceName: serviceName servicePort: 8080
- 执行安装命令,使用自定义配置文件:
helm install -f ingress.yaml ingress ./ingress
自定义配置文件内容:
ingress: hosts: - host: nutrizone.k8s.com paths: - path: /api/ backend: serviceName: trala-backend servicePort: 8080 - path: / backend: serviceName: trala-ui servicePort: 8080
问题现象
执行命令查看Nginx Controller配置:
kubectl exec pod/ingress-nginx-ingress-controller-55b985bcfd-7p7hk -n default -- cat /etc/nginx/nginx.conf
发现仅存在如下配置,/api/路径未被添加:
location / { return 404; }
多次重装、升级Nginx版本,调整values.yaml和模板文件后问题仍未解决。
排查与解决方案
1. 检查Ingress资源是否正确生成
执行以下命令确认Ingress资源状态:
kubectl get ingress kubectl describe ingress ingress-service
查看输出中是否包含nutrizone.k8s.com的host配置,以及/api/和/的路径规则,同时检查事件栏是否有报错信息。
2. 修正Helm安装命令的文件命名冲突
自定义配置文件命名为ingress.yaml会与templates目录下的模板文件重名,可能导致Helm解析错误。将自定义配置文件重命名为custom-values.yaml,重新执行安装:
helm install -f custom-values.yaml ingress ./ingress
3. 验证模板渲染结果
使用helm template命令提前查看渲染后的Ingress资源,确认配置是否正确:
helm template ./ingress -f custom-values.yaml
检查输出的Ingress YAML中,spec.rules下的host和paths是否与自定义配置一致。
4. 确认Minikube Ingress插件状态
确保Minikube已启用Ingress插件,且Controller Pod正常运行:
minikube addons enable ingress kubectl get pods -n kube-system
等待Ingress Controller Pod状态变为Running后再验证配置。
5. 检查后端服务可用性
Ingress Controller会忽略不存在的后端服务对应的路径,确认trala-backend和trala-ui服务已创建且端口正常:
kubectl get services kubectl describe service trala-backend kubectl describe service trala-ui
确保服务的targetPort与Ingress配置中的servicePort一致,且后端Pod正常运行。
6. 检查Ingress Class匹配
确认Ingress Controller使用的Ingress Class与Ingress资源注解一致:
kubectl get ingressclass
如果使用的是nginx类,确保Ingress资源中的kubernetes.io/ingress.class: nginx注解正确。
内容的提问来源于stack exchange,提问作者furion2000

