【问题标题】:No outgoing network connection in Kubernetes clusterKubernetes 集群中没有传出网络连接
【发布时间】:2019-01-17 08:46:31
【问题描述】:

我已经构建了具有 3 个工作节点和一个管理节点的集群。工作节点部署并设置了 kube-dns 和 calica。每台机器都有自己的外部 IP 和关联的 DNS。我成功运行了 nginx-ingress-controller,它的默认 404-endpoint 可以从外部访问。

现在的问题是,由于某种原因,worker 中的 pod 不允许建立出站连接。当我将 exec 放入 pod 时,我无法 curl 也无法 ping,即使网络似乎在 pod 内配置得很好。我试图检查 calico 配置,但它非常混乱,我不知道它怎么可能是错误的。是否有任何默认的 calico/k8s 设置禁止从其节点传出连接?或者也许有人遇到过类似的问题?

我将按需提供日志输出,因为我不确定在检查这个问题时哪些信息是宝贵的。

【问题讨论】:

  • 抱歉,如果您已经说过但您是否有指向您的 Pod 服务的入口资源?据我所知,您提到了 nginx 入口控制器,但没有提到入口资源或服务。
  • 是的,服务已建立并启动,但我无法访问它们,因为我需要启用来自 pod 的传出连接才能启动我的应用程序
  • 但我确定这是连接问题,因为现在我也 helm-deployed cert-manager 并且它无法访问 acme api 以使用信息“host is unreachable”进行验证
  • 能否为您的部署和服务提供配置?

标签: kubernetes project-calico nginx-ingress kubernetes-helm


【解决方案1】:

感谢cmets,经过几个小时的排查,终于发现问题出在kube-dns配置错误。当您部署 kube-dns 时,它会自动从您的机器 /etc/resolv.conf 导入名称服务器列表。它工作得很好,除非您安装了带有 systemd-resolve DNS 服务器的 ubuntu(并且默认情况下已安装)。它作为代理 DNS 服务器工作,地址为 127.0.0.53,并且在 pod 内部无法访问。这就是为什么即使在安装并激活了 kube-dns 之后 DNS 名称服务器也无法访问的原因。

我使用的这个问题的解决方法如下:

  1. 检查您的机器使用的名称服务器是什么 - 对我来说它在 /run/systemd/resolve/resolv.conf 中

  2. 新建一个ConfigMap替换kube-dns默认的,填写如下:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      labels:
        addonmanager.kubernetes.io/mode: EnsureExists
      name: kube-dns
      namespace: kube-system
    data:
      upstreamNameservers: |
        ["Your nameserver address"]
    
  3. 重新部署 kube-dns。您的正确 DNS 现在应该可以工作了

【讨论】:

  • 嗨...您是如何重新部署 kube-dns 的?您是否先部署了 ConfigMap,然后停止了 coredns pod?
  • 嗨,就我而言,我仍在使用旧的 kube-dns,而不是 CoreDNS,它是从 kubernetes 1.11 开始的默认 kubernetes 设置的一部分 大多数 kube-dns 问题都通过 coredns AFAIK 解决了。如果您想重新部署您的 CoreDNS 安装,我建议您遵循本指南:github.com/coredns/deployment/tree/master/kubernetes
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 2020-06-16
相关资源
最近更新 更多