如何使用Azure Kubernetes Service为多个环境和服务自定义CoreDNS?

问题描述

我正在研究一个包含多个相互通信的服务的现有AKS群集。当前正在运行,但是通信使用外部名称。这意味着这些内部请求将发夹。

我正在使用的环境是一个生产前集群,该集群承载着多个环境,每个环境都有自己的名称空间。只有一个Nginx入口负载平衡器(单个外部IP),并且每个名称空间都有一个入口,该入口将主机映射到环境服务。我的主持人的格式为<env>.domain.com。路径采用/api/<service>的形式,它们映射到相应的服务。

我要完成的工作是设置一个ConfigMap,它将重写出口请求并避免发夹。例如,从service1service2的请求将是https://<env>.domain.com/api/service2/。然后,已配置的一个或多个地图将需要将该请求重写为针对该环境和服务的正确内部服务。

我已阅读Customize CoreDNS with Azure Kubernetes Service,不确定如何将其样本应用于我的情况。他们的示例如下:

apiVersion: v1
kind: ConfigMap
Metadata:
  name: coredns-custom
  namespace: kube-system
data:
  test.server: | # you may select any name here,but it must end with the .server file extension
    <domain to be rewritten>.com:53 {
        errors
        cache 30
        rewrite name substring <domain to be rewritten>.com default.svc.cluster.local
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          upstream
          fallthrough in-addr.arpa ip6.arpa
        }
        forward .  /etc/resolv.conf # you can redirect this to a specific DNS server such as 10.0.0.10,but that server must be able to resolve the rewritten domain name
    }

我的计划是进行以下更改:

  1. 使用以下行更新上述配置:
rewrite name regex ([^.]+)\.domain\.com {1}.svc.cluster.local
  1. 为每个环境添加<env>.svc.cluster.local的入口规则

这是在生产前环境中进行的,因此我对配置有反复试验的余地。但是,我希望确认自己走的路正确。我是否正确认为上述更改会将我的内部请求重写为内部名称,并被以内部名称为主机的入口资源捕获?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)