前言
遇到问题,就想让K8S集群内的所有域名直接访问Apisix的服务
- 最近内网测试应用老是需要找指定服务的IP去访问,太麻烦了。
- gitlab部署runner时需要配置gitlab的访问域名,填写的是外网域名而非内网svc,明明都是一个局域网通过外网访问太浪费流量了,而且速度也不快。
主要有2个好处:
- 域名DNS解析至内网可以减少外网访问流量压力
- 如果内外网断网隔离,可以避免内网测试时需要重新配置访问地址(如ip访问),如果直接hosts文件配置K8S每个节点的hosts文件都要修改。
参考资料
K8S官网配置教程: https://kubernetes.io/zh/docs/tasks/administer-cluster/coredns/
coredns官网: https://coredns.io/
coredns插件rewrite重写转发: https://coredns.io/plugins/rewrite/
坑
rewrite name这个插件是匹配部分替换后转发,而不是直接转发访问,例如:
www.test.com域名配置rewrite name suffix test.com apisix-gateway.apisix.svc.cluster.local- 重写后会变成
www.apisix-gateway.apisix.svc.cluster.local前面多了个www.
开始配置
编辑coredns的configmaps
kubectl -n kube-system edit configmaps coredns
添加rewrite插件
apiVersion: v1
data:
Corefile: |
.:53 {
### 其他的插件配置 ###
# 加到这个位置,这里用正则全匹配替换转发后域名
rewrite name regex .*\.ljdzsk\.com apisix-gateway.apisix.svc.cluster.local
# 加到这前面
forward . /etc/resolv.conf {
max_concurrent 1000
}
### 其他的插件配置 ###
}
等待5分钟左右coredns自动更新配置,或者手动删除coredns的pod进行重启
kubectl -n kube-system get pod | grep coredns | awk '{print $1}' | xargs kubectl -n kube-system delete pod