docker - K8s - 不同命名空间中 pod 之间的 DNS 解析

标签 docker kubernetes dns kubectl

我在名为 "a" 的命名空间中有一个简单的 pod ,
和命名空间中的另一个 pod "b" ...

我还有一个从 "a" 发出 grpc 调用的测试脚本。至"b" .

  • 这个脚本不工作在使用 FQDN(例如“some-service.b.cluster.local”)
  • 这个脚本确实有效如果使用“b”命名空间中 pod 的确切 IP 地址

  • 我想是DNS解析中的一些错误,
    但我真的无法前进。

    有什么帮助吗?
    kubectl exec -n a somepod-f647b7d95-mrvfr cat /etc/resolv.conf
    
    nameserver 10.12.0.10
    search chimera.svc.cluster.local svc.cluster.local cluster.local c.<company-name>-staging.internal <provider>.internal
    options ndots:5
    
    kubectl get pods -n kube-system
    
    event-exporter-v0.2.4-6d4c69fbfb-f4xpf                           1/1     Running   0          24d
    fluentd-gcp-scaler-6965bb45c9-mzvw6                              1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-2m2bf                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-2v6bq                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-4xpbc                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-7g5hm                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-8mqvc                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-f9hrs                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-fr58c                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-hzrsb                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-kq8hc                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-kt6p5                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-nsztm                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-qcl4r                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-qggv9                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-qkkp5                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-rm9hn                                         1/1     Running   0          5d5h
    fluentd-gcp-v3.2.0-sv52h                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-t75fp                                         1/1     Running   0          7d6h
    fluentd-gcp-v3.2.0-v49fv                                         1/1     Running   0          7d6h
    kube-dns-6cd7bbdf65-jnntn                                        4/4     Running   0          24d
    kube-dns-6cd7bbdf65-txmlj                                        4/4     Running   0          24d
    kube-dns-autoscaler-8687c64fc-29jgq                              1/1     Running   0          7d6h
    kube-proxy-gke-iceberg-api-v2-201908101259587443-01f0b55b-q0k3   1/1     Running   0          217d
    kube-proxy-gke-iceberg-api-v2-201908101259587443-0d661dfb-3zhx   1/1     Running   0          217d
    kube-proxy-gke-iceberg-api-v2-201908101259587443-92bbd393-w96w   1/1     Running   1          115d
    kube-proxy-gke-iceberg-es-single-202003021919386-1b520a2e-sn9m   1/1     Running   0          5d6h
    kube-proxy-gke-iceberg-es-single-202003021919386-bf6046bf-7wsp   1/1     Running   0          5d5h
    kube-proxy-gke-iceberg-es-single-202003021919386-d64daa4e-1jqz   1/1     Running   0          5d5h
    kube-proxy-gke-iceberg-general-20190810125958886-21ed2623-4m0p   1/1     Running   0          217d
    kube-proxy-gke-iceberg-general-20190810125958886-8b185cf9-x1j2   1/1     Running   0          217d
    kube-proxy-gke-iceberg-general-20190810125958886-eaf63d3c-k338   1/1     Running   0          217d
    kube-proxy-gke-iceberg-kafka-2019081012595876540-429586da-m2qf   1/1     Running   0          217d
    kube-proxy-gke-iceberg-kafka-2019081012595876540-76ebb654-z7xx   1/1     Running   0          217d
    kube-proxy-gke-iceberg-kafka-2019081012595876540-c3abee6e-4q76   1/1     Running   0          217d
    kube-proxy-gke-iceberg-rabbitmq-2019081012595876-552d6676-8z2k   1/1     Running   0          217d
    kube-proxy-gke-iceberg-rabbitmq-2019081012595876-662980f7-76jc   1/1     Running   0          217d
    kube-proxy-gke-iceberg-rabbitmq-2019081012595876-b269df22-6zqj   1/1     Running   0          217d
    kube-proxy-gke-iceberg-redis-2019081012595877180-38264a5e-c0ch   1/1     Running   0          217d
    kube-proxy-gke-iceberg-redis-2019081012595877180-9412d5f5-pt3w   1/1     Running   0          217d
    kube-proxy-gke-iceberg-redis-2019081012595877180-947dc20b-c002   1/1     Running   0          217d
    kube-state-metrics-67b67d8fdd-nkpt4                              2/2     Running   0          24d
    l7-default-backend-fd59995cd-cvqwb                               1/1     Running   0          24d
    metrics-server-v0.3.1-5c8f664b95-sthjz
    

    最佳答案

    根据您的描述,您似乎正在运行 KubeDNS。我给你的第一条建议是 migrate到 CoreDNS,因为 KubeDNS 在 deprecation path .

    其次,有两件事突然出现在我身上。

  • 您说的是在 pod 之间进行调用,而不是 services .虽然 Kubernetes 确实在您的应用程序之间提供服务发现,但正如您所知,它是通过 DNS 来实现的。但是,仅仅因为 pod 可以相互解析 doesn't mean容器的端口将暴露在其 pod 之外。要做到这一点,即使对于集群中无法解析它的应用程序,您也必须为每个 Pod 或 Controller 声明一个服务资源。
  • 当您谈论进行引用 B pod/服务的 FQDN 的调用时,您没有指定默认的 FQDN 架构,也没有提及对此进行了自定义。

  • 一、请问可以吗kubectl get svc -n NAMESPACE对于您的 A 和 B pod 正在运行的两个命名空间,并确认类型为 ClusterIP 的服务已创建并且 IP 地址已与服务相关联?

    其次,您能否通过 specifying the following FQDN format 尝试执行从应用程序 A 到应用程序 B 的服务的连接尝试?反而?
    some-service.b.svc.cluster.local
    注意 服务端 部分。你提到了some-service.b.cluster.local在你的 OP 中。

    最后,如果一切恢复正常,我们可以开始故障排除 kube-dns .似乎所有三个 pod 都在运行。但是,您是否尝试过 describe他们和/或grab their logs ?如果有任何看起来有趣的东西,您可以尝试以下方法并分享摘要吗?
    kubectl describe pod -n kube-system kube-dns-6cd7bbdf65-jnntn
    kubectl describe pod -n kube-system kube-dns-6cd7bbdf65-txmlj
    kubectl describe pod -n kube-system kube-dns-autoscaler-8687c64fc-29jgq
    
    kubectl logs -n kube-system kube-dns-6cd7bbdf65-jnntn
    kubectl logs -n kube-system kube-dns-6cd7bbdf65-txmlj
    kubectl logs -n kube-system kube-dns-autoscaler-8687c64fc-29jgq
    

    我想 logs命令将为您提供您正在寻找的答案。如果您在此问题上需要任何进一步的说明或帮助,请告诉我。我很乐意提供帮助。

    关于docker - K8s - 不同命名空间中 pod 之间的 DNS 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60888402/

    相关文章:

    dns - 为什么更新域的名称服务器需要这么长时间?

    amazon-web-services - 删除 AWS CloudFormation 堆栈但保留 Route53 记录集

    django - docker-compose:django,开发服务器没有监听?

    docker - 使用 UI 在给定时间停止或运行 docker 容器

    virtual-machine - Vagrant 和/或 Docker 工作流程与完整的 OS X 文件系统集成以获得无缝的本地感觉?

    docker - Docker-在Docker中的容器之间共享卷

    maven - 在Kubernetes上部署Lagom微服务

    git - `error: Failed to create repository/demo due to: POST https://api.github.com/user/repos: 404 Not Found []`

    kubernetes - Nginx 入口 Controller 配置 (gke)

    docker - Docker Swarm 1.12 的 DNS 故障转移