【问题标题】:How to add private DNS zone to kube-dns in GKE如何在 GKE 中将私有 DNS 区域添加到 kube-dns
【发布时间】:2019-05-21 15:19:46
【问题描述】:

我在 GKE 中创建了一个 k8 集群。

我在 Artifactory 中创建了一个 docker 注册表,这个 artifactory 托管在 AWS 上。我在 aws.abc.com AWS 中的托管区域

中有一个 docker-repo.aws.abc.com 的 route53 条目

现在,我需要配置我的集群,以便从工件中提取 docker 图像。

我浏览了文档并了解我必须在我的 kube-dns 配置映射中添加 stubDomain

kubectl edit cm kube-dns -n kube-system
apiVersion: v1
data:
  stubDomains: |
    {"aws.abc.com" : ["XX.XX.XX.XX"]}
kind: ConfigMap
metadata:
  creationTimestamp: 2019-05-21T14:30:15Z
  labels:
    addonmanager.kubernetes.io/mode: EnsureExists
  name: kube-dns
  namespace: kube-system
  resourceVersion: "7669"
  selfLink: /api/v1/namespaces/kube-system/configmaps/kube-dns
  uid: f378aa5f-7bd4-11e9-9df2-42010aa93d03

但是,docker pull 命令仍然失败。

docker pull docker-repo.aws.abc.com/abc-sampleapp-java/abc-service:V-57bc9c9-201

Error response from daemon: Get https://docker-repo.aws.abc.com/v2/: dial tcp: lookup docker-dev-repo.aws.abc.com on 169.254.169.254:53: no such host

注意:当我在工作节点上的 /etc/hosts 文件中创建条目时,docker pull 工作正常。

【问题讨论】:

    标签: kubernetes google-kubernetes-engine kube-dns coredns


    【解决方案1】:

    在 pod 启动时从注册表中提取映像使用的 DNS 设置与我们从集群内的 pod 调用 DNS 时不同。

    当 Kubernetes 启动新的 Pod 时,它会将其调度到节点上,然后名为 kubelet 的节点上的代理调用容器引擎 (Docker) 下载映像并使用设计的配置运行它。

    Docker 使用系统 DNS 来解析注册表的地址,因为它可以在我们的主机系统上正常工作,而不是在 Kubernetes 中,这就是为什么任何 DNS 设置都不会影响映像上的 DNS 解析下载阶段。 https://github.com/kubernetes/kubernetes/issues/8735 是 Github 上关于它的讨论。

    如果我们想更改 DNS 设置并覆盖注册表 IP 以在图像下载阶段使用它,我们应该在主机系统中设置它。在配置中,我们需要修改集群中所有节点的 DNS 设置。最简单的方法是使用 /etc/hosts 文件并使用您的自定义 IP 添加记录,例如192.168.1.124 example.com。

    修改后,节点上的 Docker 将使用来自 /etc/hosts 的记录作为您的注册表而不是全局 DNS 记录,因为该文件具有更高的优先级,您将能够运行 pod你的形象。

    更新主机文件。 您可以使用具有安全上下文的 DeamonSet,如下所示:

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: hosts-fix-script
      namespace: kube-system
      labels:
        app: hosts-fix-script
    spec:
      selector:
        matchLabels:
          name: hosts-fix
      template:
        metadata:
          labels:
            name: hosts-fix
        spec:
          hostPID: true
          containers:
          - name: hosts-fix-script
            image: gcr.io/google-containers/startup-script:v1
            imagePullPolicy: Always
            securityContext:
              privileged: true
            env:
            - name: STARTUP_SCRIPT
              value: |
                #!/bin/bash
                    echo "10.0.0.11 onprem.registry" >> /etc/hosts
                echo 'Done'
    

    你需要运行 kubectl apply -f

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      • 2019-01-31
      • 2018-08-09
      • 1970-01-01
      • 2019-06-08
      相关资源
      最近更新 更多