云容器引擎 CCE-使用Annotation配置Nginx Ingress:域名正则化

时间:2024-05-31 08:37:52

域名 正则化

Nginx Ingress支持配置“nginx.ingress.kubernetes.io/server-alias”注解实现域名配置正则表达式。

  1. 请参见通过kubectl连接集群,使用kubectl连接集群。
  2. 创建名为“ingress-test.yaml”的YAML文件,此处文件名可自定义。

    vi ingress-test.yaml

    以正则表达式~^www\.\d+\.example\.com$,abc.example.com为例,表示使用www.{一个或多个数字}.example.com和abc.example.com域名也可正常访问Ingress。

    • 1.23及以上版本集群
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        annotations:
          nginx.ingress.kubernetes.io/server-alias: '~^www\.\d+\.example\.com$,abc.example.com'
        name: ingress-test
        namespace: default
      spec:
        rules:
        - host: foo.bar.com
          http:
            paths:
            - backend:
                service:
                  name: nginx-93244  #替换为您的目标服务名称
                  port: 
                    number: 80  #替换为您的目标服务端口
              path: /
              pathType: ImplementationSpecific
        ingressClassName: nginx
    • 1.21及以下版本集群
      apiVersion: networking.k8s.io/v1beta1
      kind: Ingress 
      metadata: 
        annotations: 
          kubernetes.io/ingress.class: nginx
          nginx.ingress.kubernetes.io/ server-alias: '~^www\.\d+\.example\.com$,abc.example.com'
        name: ingress-test
        namespace: default
      spec:
        rules: 
        - host: foo.bar.com
          http: 
            paths: 
            - path: '/'
              backend: 
                serviceName: nginx-test  #替换为您的目标服务名称
                servicePort: 80  #替换为您的目标服务端口

  3. 执行以下命令,创建Ingress。

    kubectl create -f ingress-test.yaml

    预期输出:

    ingress.networking.k8s.io/ingress-test created

  4. 查看Nginx Ingress Controller的配置。

    1. 执行以下命令,查看Nginx Ingress Controller服务的Pod
      kubectl get pods -n kube-system | grep nginx-ingress-controller

      预期输出:

      cceaddon-nginx-ingress-controller-68d7bcc67-dxxxx        1/1     Running   0          18h
      cceaddon-nginx-ingress-controller-68d7bcc67-cxxxx        1/1     Running   0          18h
    2. 执行以下命令,查看Nginx Ingress Controller的配置
      kubectl exec -n kube-system cceaddon-nginx-ingress-controller-68d7bcc67-dxxxx cat /etc/nginx/nginx.conf | grep -C3 "foo.bar.com"

      预期输出:

               ## start server foo.bar.com
               server {
                        server_name foo.bar.com abc.example.com ~^www\.\d+\.example\.com$ ;
                        
                        listen 80  ;
                        listen [::]:80  ;
      --
                        }
                        
               }
               ## end server foo.bar.com

  5. 执行以下命令,获取Ingress对应的IP。

    kubectl get ingress

    预期输出:

    NAME         CLASS   HOSTS         ADDRESS      PORTS   AGE
    nginx-test   nginx   foo.bar.com   10.3.xx.xx   80      14m

  6. 执行以下命令,测试不同规则下的服务访问。

    • 执行以下命令,通过Host: foo.bar.com访问服务。
      curl -H "Host: foo.bar.com" 10.3.xx.xx/

      预期可正常访问网页。

    • 执行以下命令,通过Host: www.123.example.com访问服务
      curl -H "Host: www.123.example.com" 10.3.xx.xx/

      预期可正常访问网页。

    • 执行以下命令,通过Host: www.321.example.com访问服务
      curl -H "Host: www.321.example.com" 10.3.xx.xx/

      预期可正常访问网页。

support.huaweicloud.com/usermanual-cce/cce_10_0699.html