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

Azure Kubernetes - How to determine DNS name that can be used for INTERNAL Load Balancer?

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

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

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

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

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

你可以kubectl get svc

并使用服务 ads-aks-testExternal IP,正如您在注释中提到的“true”,因此它将是内部 IP。

如果您希望在同一个集群中解析服务名称,您可以使用服务名称本身。

https://kubernetes.io/docs/concepts/services-networking/service/

你可以这样做:your-svc.your-namespace.svc.cluster.local

请注意,它仅在服务位于同一 Kubernetes 集群中时才有效。

设置ExternalDNS in your K8s cluster. Here is a guide for Azure Private DNS。这将允许您通过 Kubernetes 资源动态更新您为服务选择的任何主机名的 DNS 记录。

示例配置如下所示(摘自 Azure Private 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

内部负载平衡器使 Kubernetes 服务只能由与 Kubernetes 集群位于同一虚拟网络中的应用程序运行访问。

https://docs.microsoft.com/en-us/azure/aks/internal-lb

看来你想要这个配置?有对等吗?您还需要允许在 NSG 中进行通信。