Helm配置Nginx为Namespace独立Pod未生成实例问题咨询
问题原因
- Nginx开关默认未开启:你当前
values.yaml中nginx.enabled字段值为false,就算存在Nginx的工作负载配置,默认也不会生成对应资源,部署时如果没有手动修改该值,自然不会创建Nginx Pod。 - 缺少Nginx工作负载模板:你当前只编写了存储Nginx配置的ConfigMap模板,Kubernetes不会自动根据ConfigMap生成运行Nginx的Pod,你需要额外编写Deployment(无状态服务常用)模板来定义Nginx的Pod运行规则,同时将ConfigMap中的配置挂载到Nginx容器的对应路径下。
解决方案
- 调整开关配置:将
values.yaml中的nginx.enabled改为true,或者部署时执行命令追加参数--set nginx.enabled=true。 - 在Chart的
templates目录下新增nginx-deployment.yaml文件,示例内容如下:
{{- if .Values.nginx.enabled -}} apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "app.fullname" . }}-nginx labels: app.kubernetes.io/name: {{ include "app.fullname" . }}-nginx app.kubernetes.io/instance: {{ .Release.Name }} spec: replicas: 1 selector: matchLabels: app.kubernetes.io/name: {{ include "app.fullname" . }}-nginx app.kubernetes.io/instance: {{ .Release.Name }} template: metadata: labels: app.kubernetes.io/name: {{ include "app.fullname" . }}-nginx app.kubernetes.io/instance: {{ .Release.Name }} spec: containers: - name: nginx image: "{{ .Values.nginx.image.repository }}:{{ .Values.nginx.image.tag }}" imagePullPolicy: {{ .Values.nginx.image.pullPolicy }} ports: - name: http containerPort: 80 protocol: TCP volumeMounts: # 将ConfigMap的配置挂载到Nginx默认配置路径 - name: nginx-config mountPath: /etc/nginx/conf.d/default.conf subPath: nginx.conf resources: {{ toYaml .Values.nginx.resources | indent 12 }} volumes: - name: nginx-config configMap: name: {{ include "app.fullname" . }}-nginxconfig {{- end }}
其他注意事项
- 如果需要集群外部访问Nginx服务,需要额外新增对应的Service或Ingress资源模板。
- 配置中
/home/app_api/web/staticfiles/路径需要和你的应用Pod共享存储,否则Nginx无法读取到静态文件,测试场景可以用emptyDir实现共享,生产环境建议用PersistentVolumeClaim。 - 注意确认你Nginx配置中代理的后端服务
app_api的名称和端口是否和实际部署的后端服务一致,避免出现代理502错误。
内容的提问来源于stack exchange,提问作者merilstack
相关产品推荐
相关产品推荐

