【问题标题】:DNS resolution of ExternalName in Minikube on MacMac 上 Minikube 中 ExternalName 的 DNS 解析
【发布时间】:2019-12-06 13:57:12
【问题描述】:

我正在尝试通过 virtualbox 中的 minikube 设置连接到我的 mac 上的 docker 中运行的 postgres 容器。但我遇到了 dns 解决问题。

我在 docker 上将 postgres 作为容器运行

> docker ps                                                                                                                                                                                                                                                                                   
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
a794aca3a6dc        postgres            "docker-entrypoint.s…"   3 days ago          Up 3 days           0.0.0.0:5432->5432/tcp   postgres

在我的 Mac / VirtualBox / Minikube 设置上,我创建了一个服务

kind: Service
apiVersion: v1
metadata:
  name: postgres-svc
spec:
  type: ExternalName
  externalName: 10.0.2.2
  ports:
    - port: 5432

10.0.2.2 是主机接口的别名(找到此信息here

> kubectl get service --all-namespaces
NAMESPACE     NAME                                             TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default       kubernetes                                       ClusterIP      10.96.0.1        <none>        443/TCP                  21d
hazelnut      postgres-svc                                     ExternalName   <none>           10.0.2.2      5432/TCP                 27m
kube-system   kube-dns                                         ClusterIP      10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   21d
kube-system   kubernetes-dashboard                             ClusterIP      10.108.181.235   <none>        80/TCP                   19d
kube-system   tiller-deploy                                    ClusterIP      10.101.218.56    <none>        44134/TCP                20d

(我们的命名空间是hazelnut,别问了:-)

在我的部署中,如果我直接连接到 10.0.2.2,它会毫无问题地连接到 postgres,但是如果我尝试解析 kubernetes 服务的主机名,它就不起作用。 所以这不是防火墙或路由问题,纯 dns。

我试过postgres-svc.hazelnut.cluster.localpostgres-svcpostgres-svc.hazelnut.svc.cluster.localpostgres-svc.hazelnut 都导致 NXDOMAIN

kubernetes.default 可以工作。

> nslookup kubernetes.default
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   kubernetes.default.svc.cluster.local
Address: 10.96.0.1

post 中,他们提到使用 kube-dns 应该可以解决问题,但我正在使用它并无济于事

> kubectl get svc --namespace=kube-system
NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
kube-dns               ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   21d
...

知道如何让它正常工作吗?

【问题讨论】:

    标签: macos kubernetes dns minikube kube-dns


    【解决方案1】:

    对于ExternalName service typeexternalName 应该是 FQDN,而不是 IP 地址,例如

    kind: Service
    ...
    metadata:
      name: postgres-svc
    spec:
      type: ExternalName
      externalName: mydb.mytestdomain
    

    主机应该能够解析该 FQDN 的名称。您可以在 Mac 主机的 /etc/hosts 中添加一条记录来实现:

    10.0.0.2    mydb.mytestdomain
    

    实际上,coredns 使用 Minikube VM 中 /etc/resolv.conf 中配置的名称解析器。它指向 VirtualBox NAT 网络 (10.0.2.3) 中的名称解析器。反过来,VirtualBox 依赖于查看本地 /etc/hosts 文件的主机名解析机制。

    测试: macOS 10.14.3, VBox 6.0.10, Kubernetes 1.15.0, minikube 1.2.0, 核心

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2015-02-09
      • 1970-01-01
      • 2018-06-09
      • 2020-11-18
      相关资源
      最近更新 更多