Kubernetes 自定义 ingress规则
2020-06-21 by dongnan
开始之前
默认情况下我们使用的是 NGINX Ingress Controller
内置的选项,例如需要关闭日志:
annotations:
nginx.ingress.kubernetes.io/enable-access-log: "false"
当内置选项无法满足需求时,Ingress
控制器提供了添加自定义nginx参数配置的方式,接下来我们使用一个例子说明。
环境描述
测试的k8s
集群由一个Master
管理节点、两个Worker
计算节点组成,详细请参考这里。
举个栗子
设置 ingress
规则目标是,当访问域名A(a.xyc.com
)重定向到域名B(b.xyc.com
) 。
操作步骤
编辑 lb.yaml
配置文件。
这里注释掉之前的无效选项:
annotations:
# nginx.ingress.kubernetes.io/affinity: "cookie"
#...省略
添加configuration-snippet
选项:
annotations:
#...省略
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite ^(.*)$ https://b.xyc.com$1 permanent;
修改后的lb.yaml
配置文件:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
namespace: xhf-prd
name: prd-xhf
annotations:
#...省略
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite ^(.*)$ https://b.xyc.com$1 permanent;
spec:
rules:
- host: a.xyc.com
http:
paths:
- path: /
backend:
serviceName: xhf-svc
servicePort: 80
验证
使用curl
命令模拟请求:
curl -IL https://a.xyc.com
HTTP/2 301
#...省略
location: https://b.xyc.com/
set-cookie: SERVERID=22922744xxxx0a95ab6cd|1642496472|1642496472;Path=/
HTTP/2 200
#...省略
set-cookie: SERVERID=814b1d14xxxxb305a1df8|1642496473|1642496473;Path=/
返回结果共请求了两次:
- 第
1
次服务器返回301
状态码a.xyc.com
被重定向新的地址https://b.xyc.com/
。 - 第
2
次访问新的地址是https://b.xyc.com/
返回200
状态码。