> 技术文档 > 【K8S】在 Kubernetes 上配置安装 Nginx Ingress 控制器指南_ingress 怎么配置

【K8S】在 Kubernetes 上配置安装 Nginx Ingress 控制器指南_ingress 怎么配置


文章目录

      • 架构概览
      • 先决条件
      • 部署方案选择
        • 方案一:手动 YAML 部署
          • 核心组件详解
        • 方案二:Helm快速部署(生产推荐)
      • 验证部署
      • DNS配置策略
        • 方案A:单域名映射
        • 方案B:通配符映射(推荐)
      • 应用实战:部署示例服务
      • 最佳实践总结

本文将指导您通过两种方式部署Kubernetes 社区版 Nginx Ingress 控制器,并配置DNS实现流量路由。目前存在两种 Nginx Ingress 控制器:

  1. Kubernetes社区版
  2. Nginx Inc开发版

配置文件 Nginx Ingress k8s 配置


架构概览

下图展示了 Nginx Ingress 控制器在 Kubernetes 中的核心架构:

【K8S】在 Kubernetes 上配置安装 Nginx Ingress 控制器指南_ingress 怎么配置


先决条件

  1. 运行中的Kubernetes集群
  2. 已安装并认证的kubectl
  3. 集群管理员权限
  4. 指向Ingress控制器负载均衡器IP的有效域名(可选

部署方案选择

方案一:手动 YAML 部署

下载 Nginx Ingress k8s 配置

分步部署以下关键组件:

kubectl create ns ingress-nginxcd nginx-ingress-controller/manifestskubectl apply -f .
核心组件详解
  1. 准入控制器(ValidatingWebhook)

【K8S】在 Kubernetes 上配置安装 Nginx Ingress 控制器指南_ingress 怎么配置

防止错误Ingress配置破坏集群,工作流程:

  • 拦截Ingress创建请求
  • API服务器转发配置到Webhook服务
  • Nginx控制器验证配置(8443端口)
  • 返回验证结果
  1. 证书生成Job
    使用kube-webhook-certgen自动生成CA证书:

    apiVersion: batch/v1kind: Jobmetadata: name: ingress-nginx-admission-create namespace: ingress-nginxspec: template: spec: containers: - args: [create, --host=ingress-nginx-controller-admission,...] image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20231011-8b53cabe0
  2. Controller核心部署
    Deployment关键配置:

    containers:- args: - /nginx-ingress-controller - --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller image: registry.k8s.io/ingress-nginx/controller:v1.9.5 ports: - containerPort: 80 # HTTP - containerPort: 443 # HTTPS - containerPort: 8443 # Webhook
方案二:Helm快速部署(生产推荐)
helm upgrade --install ingress-nginx ingress-nginx \\ --repo https://kubernetes.github.io/ingress-nginx \\ --namespace ingress-nginx --create-namespace

验证部署

  1. 获取负载均衡器IP:
    kubectl -n ingress-nginx get svc ingress-nginx-controller
  2. 测试默认后端(应返回404):
    curl YOUR_LOADBALANCER_IP
  3. 健康检查(应返回200):
    curl YOUR_LOADBALANCER_IP/healthz

Kubernetes 使用 Ingress-Nginx 基于 Cookie 实现会话保持的负载均衡


DNS配置策略

方案A:单域名映射
www.example.com --> LoadBalancer IP

适用路径路由:

http://www.example.com/app1http://www.example.com/app2/api
方案B:通配符映射(推荐)
*.apps.example.com --> LoadBalancer IP

【K8S】在 Kubernetes 上配置安装 Nginx Ingress 控制器指南_ingress 怎么配置

实现动态路由:

http://demo1.apps.example.comhttp://grafana.apps.example.com

应用实战:部署示例服务

  1. 创建示例应用

    # hello-app.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: hello-app namespace: devspec: replicas: 2 template: containers: - name: hello image: \"gcr.io/google-samples/hello-app:2.0\"
  2. 创建ClusterIP服务

    # hello-service.yamlkind: Servicemetadata: name: hello-service namespace: devspec: ports: [{ port: 80, targetPort: 8080 }] selector: { app: hello }
  3. 配置Ingress路由规则

    # ingress.yamlapiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: demo-ingress namespace: devspec: ingressClassName: nginx rules: - host: \"demo.apps.yourdomain.com\" http: paths: - path: / backend: service:  name: hello-service  port: { number: 80 }
  4. 访问测试:

【K8S】在 Kubernetes 上配置安装 Nginx Ingress 控制器指南_ingress 怎么配置


最佳实践总结

  1. 生产环境建议:使用Helm部署并启用ValidatingWebhook
  2. DNS配置:通配符域名简化路由管理
  3. 安全加固
    • 限制Controller权限(RBAC)
    • 定期轮转Webhook证书
  4. 性能优化:通过ConfigMap调整Nginx参数
    # 示例:调优keepalive连接apiVersion: v1kind: ConfigMapmetadata: name: nginx-config namespace: ingress-nginxdata: keep-alive: \"75\" keep-alive-requests: \"100\"

完整配置参考 Nginx Ingress官方文档