Kubernetes集群中没有传出网络连接

时间:2018-08-09 19:35:10

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

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

现在,问题是由于某些原因,不允许工作人员中的Pod建立出站连接。当我将exec封装到Pod中时,我无法卷曲,也无法ping通,即使网络似乎在Pod内配置良好。我试图检查印花棉布的配置,但是它很杂乱,我不知道它怎么可能是错误的。是否有任何默认的calico / k8s设置禁止其节点进行传出连接?也许有人面临类似的问题?

我不确定,我将按需提供日志输出,哪些信息对于检查此问题将是宝贵的。

1 个答案:

答案 0 :(得分:2)

感谢您的评论,经过数小时的调查,我终于发现问题是错误地配置了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的默认ConfigMap,并按如下所示进行填充:

    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现在应该可以正常工作