
dyrnq/ingress-nginx-controlleringress-nginx/controller 是 Kubernetes 官方维护的 Ingress 控制器实现,基于 NGINX 构建,用于管理 Kubernetes 集群的入站流量。该镜像提供了 NGINX 反向代理与 Kubernetes API 的集成能力,支持通过 Kubernetes Ingress 资源定义 HTTP/HTTPS 路由规则,实现集群内服务的外部访问控制。
该镜像通过以下官方仓库提供(不同仓库内容一致,可根据网络环境选择):
registry.k8s.io/ingress-nginx/controller(Kubernetes 官方镜像仓库,推荐)k8s.gcr.io/ingress-nginx/controller(GCR 镜像仓库)quay.io/kubernetes-ingress-controller/nginx-ingress-controller(Quay 镜像仓库)/api/v1/* 重写为 /v1/*)。host 字段区分多域名路由规则。nginx.ingress.kubernetes.io/auth-tls-verify-client 配置客户端证书验证。nginx.ingress.kubernetes.io/configuration-snippet 注解注入原生 NGINX 配置片段。api.example.com 路由至 API 服务,web.example.com 路由至前端服务)。NodePort 或 Load***(取决于集群网络配置)。kubectl 工具已配置集群访问权限。通过 Kubernetes 官方提供的静态 YAML 文件部署,自动创建 Deployment、Service、ConfigMap 等资源:
bash# 部署最新稳定版(请替换为官方最新版本链接) kubectl apply -f [***]
版本说明:访问 Ingress-NGINX 发布页 获取最新版本的 YAML 链接。
通过 Helm 快速部署,支持自定义配置:
bash# 添加 Helm 仓库 helm repo add ingress-nginx [***] helm repo update # 部署(默认命名空间 ingress-nginx) helm install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --create-namespace
注意:该方式仅用于本地测试,生产环境需通过 Kubernetes 部署以确保与集群集成。
bashdocker run -d \ --name ingress-nginx-controller \ --net=host \ # 需与主机网络共享(模拟 NodePort 场景) -v /var/run/kubernetes.sock:/var/run/kubernetes.sock \ # 挂载 K8s API 套接字 -e POD_NAME=test-pod \ -e POD_NAMESPACE=default \ registry.k8s.io/ingress-nginx/controller:v1.8.2 \ /nginx-ingress-controller \ --default-backend-service=default/nginx-default-backend \ --ingress-class=nginx
通过 Kubernetes Ingress 资源定义路由规则,示例如下:
将 example.com/app 路由至 app-service:80,example.com/api 路由至 api-service:80:
yamlapiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: basic-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 # 路径重写(移除 /app 前缀) spec: ingressClassName: nginx # 指定 IngressClass(需与控制器配置匹配) rules: - host: example.com http: paths: - path: /app(/|$)(.*) pathType: Prefix backend: service: name: app-service port: number: 80 - path: /api pathType: Prefix backend: service: name: api-service port: number: 80
配合 cert-manager 自动签发 Let's Encrypt 证书,实现 HTTPS 访问:
yamlapiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: https-ingress annotations: cert-manager.io/cluster-issuer: letsencrypt-prod # cert-manager 集群签发者 nginx.ingress.kubernetes.io/ssl-redirect: "true" # HTTP 重定向至 HTTPS spec: ingressClassName: nginx tls: - hosts: - example.com secretName: example-tls # 存储证书的 Secret(由 cert-manager 自动创建) rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: web-service port: number: 80
通过 ingress-nginx-controller ConfigMap 配置 NGINX 全局参数(默认位于 ingress-nginx 命名空间):
yamlapiVersion: v1 kind: ConfigMap metadata: name: ingress-nginx-controller namespace: ingress-nginx data: worker-processes: "auto" # NGINX worker 进程数(默认 auto) keepalive-timeout: "65" # 客户端连接超时时间(秒) proxy-body-size: "10m" # 允许的请求体最大尺寸
控制器启动参数可通过 Deployment 的 args 字段配置,常用参数:
| 参数 | 说明 | 默认值 |
|---|---|---|
--ingress-class | 指定 IngressClass 名称,仅处理匹配的 Ingress 资源 | nginx |
--default-backend-service | 默认后端服务(无匹配路由时转发) | ingress-nginx/defaultbackend |
--watch-namespace | 仅监听指定命名空间的 Ingress 资源(多租户隔离) | 空(监听所有命名空间) |
--log-level | 日志级别(debug/info/warn/error) | info |
环境变量(部分由 Kubernetes 自动注入):
| 环境变量 | 说明 | 示例值 |
|---|---|---|
POD_NAME | 当前 Pod 名称(自动注入) | ingress-nginx-controller-xxx |
POD_NAMESPACE | 当前 Pod 所在命名空间(自动注入) | ingress-nginx |
NGINX_CONFIGURATION_SNIPPET | 全局 NGINX 配置片段 | http { ... } |
bashkubectl logs -n ingress-nginx deployment/ingress-nginx-controller -f
控制器默认暴露 metrics 接口(端口 ***),Prometheus 配置示例:
yamlscrape_configs: - job_name: 'ingress-nginx' static_configs: - targets: ['ingress-nginx-controller.ingress-nginx.svc:***']
通过官方 YAML 或 Helm 升级:
bash# YAML 方式(替换为新版本链接) kubectl apply -f [***] # Helm 方式 helm upgrade ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx
bash# 回滚至前一版本 Deployment kubectl rollout undo -n ingress-nginx deployment/ingress-nginx-controller
hostNetwork 使用,通过 NetworkPolicy 隔离控制器 Pod,避免暴露敏感端口。



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务