Azure Kubernetes - 如何确定可用于内部负载均衡器的 DNS 名称?

vel*_*vel 6 dns azure kubernetes azure-aks

我们已经定义了内部负载均衡器。

apiVersion: v1
kind: Service
metadata:
  name: ads-aks-test
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 9000
  selector:
    app: ads-aks-test
Run Code Online (Sandbox Code Playgroud)

它有自己的IP 和外部IP。我们希望从另一个虚拟网络中的虚拟机访问此服务。我们需要提前知道它的DNS 名称- 完全限定名称,因为我们正在从部署平台部署多个应用程序,并且我们希望根据其服务名称了解在成功部署后如何访问它,而不是等待 IP 地址待确定(手动或自动)。例如,这是我们的 APP1,之后我们会自动安装需要访问此服务的应用程序 APP2。因此,我们希望避免使用 IP 信息。

我们如何确定我们将从第二个应用程序访问它的服务“主机名”是什么?

我在文档中找到的唯一信息是:“如果您的服务使用动态或静态公共IP地址,您可以使用服务注释service.beta.kubernetes.io/azure-dns-label-name来设置面向公众的DNS 标签。” - 但这是我们不想要的公共负载均衡器!

小智 3

在 K8s 集群中设置外部 DNS 。这是Azure 私有 DNS的指南。这将允许您通过 Kubernetes 资源动态更新为服务选择的任何主机名的 DNS 记录。

示例配置如下所示(摘自Azure 私有 DNS指南)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: externaldns
spec:
  selector:
    matchLabels:
      app: externaldns
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: externaldns
    spec:
      containers:
      - name: externaldns
        image: k8s.gcr.io/external-dns/external-dns:v0.7.3
        args:
        - --source=service
        - --source=ingress
        - --domain-filter=example.com
        - --provider=azure-private-dns
        - --azure-resource-group=externaldns
        - --azure-subscription-id=<use the id of your subscription>
        volumeMounts:
        - name: azure-config-file
          mountPath: /etc/kubernetes
          readOnly: true
      volumes:
      - name: azure-config-file
        secret:
          secretName: azure-config-file
Run Code Online (Sandbox Code Playgroud)