云容器引擎 CCE-使用Annotation配置Nginx Ingress:域名正则化
域名 正则化
Nginx Ingress支持配置“nginx.ingress.kubernetes.io/server-alias”注解实现域名配置正则表达式。
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 创建名为“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 #替换为您的目标服务端口
- 1.23及以上版本集群
- 执行以下命令,创建Ingress。
kubectl create -f ingress-test.yaml
预期输出:
ingress.networking.k8s.io/ingress-test created
- 查看Nginx Ingress Controller的配置。
- 执行以下命令,查看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
- 执行以下命令,查看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
- 执行以下命令,查看Nginx Ingress Controller服务的Pod
- 执行以下命令,获取Ingress对应的IP。
kubectl get ingress
预期输出:
NAME CLASS HOSTS ADDRESS PORTS AGE nginx-test nginx foo.bar.com 10.3.xx.xx 80 14m
- 执行以下命令,测试不同规则下的服务访问。
- 执行以下命令,通过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/
预期可正常访问网页。
- 执行以下命令,通过Host: foo.bar.com访问服务。