Kubernetes中的 Nginx Ingress 解析

发布于:2025-03-29 ⋅ 阅读:(25) ⋅ 点赞:(0)

在Kubernetes(k8s)中,Nginx Ingress是一个重要的组件,下面将从概念、工作原理、部署和配置等方面详细介绍。

https://artifacthub.io/packages/helm/ingress-nginx/ingress-nginx

概念

  • Ingress:Ingress是Kubernetes中的一种API对象,用于管理集群外部对集群内部服务的访问规则。它定义了一系列规则,这些规则允许外部HTTP和HTTPS流量访问集群内的服务,从而实现了基于域名、路径等条件的路由。
  • Nginx Ingress:Nginx Ingress是基于Nginx服务器实现的Ingress控制器。它根据Ingress资源的配置动态生成Nginx的配置文件,并重新加载Nginx服务,以实现HTTP和HTTPS流量的路由和负载均衡。

工作原理

  1. Ingress资源定义:用户通过创建Ingress资源对象,定义外部访问的规则,例如基于域名的路由规则(如 example.com 指向某个服务)、基于路径的路由规则(如 /api 指向另一个服务)等。
  2. Nginx Ingress控制器监听:Nginx Ingress控制器会持续监听Kubernetes API Server,实时获取Ingress资源的变化。
  3. 配置生成与更新:当Ingress资源发生变化时,Nginx Ingress控制器会根据新的规则动态生成Nginx的配置文件(通常是 nginx.conf)。
  4. Nginx重新加载:生成新的配置文件后,Nginx Ingress控制器会触发Nginx服务重新加载配置,使新的路由规则生效。
  5. 流量路由:外部流量通过Nginx Ingress控制器进入集群,Nginx根据配置好的规则将流量路由到对应的后端服务。

部署Nginx Ingress控制器

以下是使用Helm部署Nginx Ingress控制器的示例步骤:

  1. 添加Helm仓库
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
  1. 创建命名空间(可选)
kubectl create namespace ingress-nginx
  1. 部署Nginx Ingress控制器
helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --set controller.replicaCount=2  # 设置控制器副本数

配置Ingress资源

以下是一个简单的Ingress资源配置示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /service1(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: service1
                port:
                  number: 80
          - path: /service2(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: service2
                port:
                  number: 80

配置解释

  • metadata:包含Ingress资源的名称和注解。注解可以用于配置Nginx的特定行为,如 nginx.ingress.kubernetes.io/rewrite-target 用于重写URL路径。
  • spec.rules:定义了路由规则。可以根据 host 字段指定域名,根据 path 字段指定路径,将流量路由到对应的后端服务。
  • backend:指定了后端服务的名称和端口。

验证配置

部署完Nginx Ingress控制器和配置好Ingress资源后,可以通过以下方式验证配置是否生效:

  1. 检查Ingress资源状态
kubectl get ingress example-ingress
  1. 访问服务:在本地的 hosts 文件中添加域名解析,将 example.com 指向Nginx Ingress控制器的外部IP地址,然后在浏览器中访问 http://example.com/service1http://example.com/service2,验证是否能够正确访问对应的服务。

通过以上步骤,你可以在Kubernetes集群中部署和配置Nginx Ingress,实现外部流量的路由和负载均衡。