外部 DNS 将公开的 TKG 集群负载均衡器服务和输入与 DNS 提供程序同步。可以为外部 DNS 部署 Tanzu 软件包,以便为集群提供动态服务发现。

软件包要求

随外部 DNS 软件包提供的示例配置包含带有和不带有 Contour Ingress 控制器的示例。如果要使用 Contour,请先进行安装,然后再安装外部 DNS 软件包。请参见使用 Kubectl 安装用于 Contour Ingress 的 Tanzu 软件包

外部 DNS 软件包可启用动态服务发现。有关示例用例,请参见外部 DNS

在 TKG 环境中,外部 DNS 的一个常见用例是与 Harbor 注册表配合使用。Harbor 需要在符合 RFC 2136 的动态 DNS 提供程序(如 AWS Route53、Azure DNS、Google Cloud DNS)或本地 DNS 服务器(如 BIND)上设置 DNS 区域。

安装外部 DNS 软件包

完成以下步骤,安装用于外部 DNS 的 Tanzu 软件包。

  1. 创建 dns.yaml 规范
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: dns-sa
      namespace: tkg-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: dns-role-binding
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
      - kind: ServiceAccount
        name: dns-sa
        namespace: tkg-system
    ---
    apiVersion: packaging.carvel.dev/v1alpha1
    kind: PackageInstall
    metadata:
      name: dns
      namespace: tkg-system
    spec:
      serviceAccountName: dns-sa
      packageRef:
        refName: dns.tanzu.vmware.com
        versionSelection:
          constraints: 1.20.2+vmware.1-tkg.1-rc.2
      values:
      - secretRef:
          name: dns-data-values
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: dns-data-values
      namespace: tkg-system
    stringData:
      values.yml: |
        ---
        dns:
          pspNames: "vmware-system-restricted"
    
  2. 安装外部 DNS 软件包。
    kubectl apply -f dns.yaml

配置外部 DNS 软件包

可以使用自定义设置配置外部 DNS 软件包。

配置外部 DNS 提供程序的部署参数。有关其他指导,请参阅 Kubernetes 站点 https://github.com/kubernetes-sigs/external-dns#running-externaldns
表 1. 外部 DNS 软件包配置
参数 描述 类型 默认
externalDns.namespace 将部署 external-dns 的命名空间 string tanzu-system-service-discovery
externalDns.image.repository 包含 external-dns 映像的存储库 string projects.registry.vmware.com/tkg
externalDns.image.name external-dns 的名称 string external-dns
externalDns.image.tag ExternalDNS 映像标记 string v0.7.4_vmware.1
externalDns.image.pullPolicy ExternalDNS 映像提取策略 string IfNotPresent
externalDns.deployment.annotations external-dns 部署上的注释 map<string,string> {}
externalDns.deployment.args 通过命令行传递到 external-dns 的参数 list<string> [](必填参数)
externalDns.deployment.env 要传递到 external-dns 的环境变量 list<string> []
externalDns.deployment.securityContext external-dns 容器的安全上下文 SecurityContext {}
externalDns.deployment.volumeMounts external-dns 容器的卷挂载 list<VolumeMount> []
externalDns.deployment.volumes external-dns pod 的卷 list<Volume> []