如何配置多个域名的 nginx ingress

概述

在 Kubernetes 集群中使用 Nginx Ingress Controller 来实现负载均衡和路由功能是非常常见的。在配置 Ingress 路由规则时,有时我们需要为一个服务配置多个域名。本文将指导你如何使用 nginx.ingress.kubernetes.io/server-alias 注解配置多个域名。

流程

下面是配置多个域名的流程:

步骤 描述
1. 创建一个 Kubernetes Service
2. 创建一个 Ingress 对象并添加多个域名
3. 配置 Nginx Ingress Controller 使用指定的 Ingress Class

步骤

步骤 1: 创建一个 Kubernetes Service

首先,我们需要创建一个 Kubernetes Service,用于将流量转发到我们的后端服务。下面是一个示例的 Service 配置:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

请将上述配置保存为 my-service.yaml 文件,并使用以下命令创建 Service:

kubectl apply -f my-service.yaml

步骤 2: 创建一个 Ingress 对象并添加多个域名

接下来,我们需要创建一个 Ingress 对象,并在其中添加多个域名。下面是一个示例的 Ingress 配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/server-alias: "example.com,www.example.com"
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80

请注意,我们在 nginx.ingress.kubernetes.io/server-alias 注解中使用了双引号 " 来指定多个域名,用逗号 , 分隔。在本示例中,我们配置了 example.comwww.example.com 两个域名。

请将上述配置保存为 my-ingress.yaml 文件,并使用以下命令创建 Ingress:

kubectl apply -f my-ingress.yaml

步骤 3: 配置 Nginx Ingress Controller 使用指定的 Ingress Class

最后,我们需要配置 Nginx Ingress Controller 使用指定的 Ingress Class。如果你的集群中有多个 Ingress Controller,你需要确保你的 Ingress 对象使用的是正确的 Ingress Class。下面是一个示例的 Ingress Class 配置:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: nginx
spec:
  controller: k8s.io/ingress-nginx
  parameters:
    apiGroup: networking.k8s.io/v1
    kind: IngressClassParametersReference
    name: nginx

请将上述配置保存为 my-ingress-class.yaml 文件,并使用以下命令创建 Ingress Class:

kubectl apply -f my-ingress-class.yaml

完成上述步骤后,你的 Ingress 应该已成功配置多个域名。

总结

配置多个域名的 Nginx Ingress Controller 是一个非常实用的功能,通过使用 nginx.ingress.kubernetes.io/server-alias 注解,我们可以轻松地实现这一点。在本文中,我们介绍了配置多个域名的完整流程,并提供了每个步骤所需的代码示例。如果你按照本文的指导进行操作,你应该能够成功配置多个域名的 Ingress。祝你好运!