首页 文章

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

提问于
浏览
0

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

现在,问题是由于某些原因,不允许工作人员中的pod Build 出站连接 . 当我将exec shell放入pod时,我无法卷曲,也无法ping,即使因此网络似乎在pod内配置得很好 . 我试图检查印花布配置,但它很乱,我不知道它是怎么回事 . 是否有任何默认的calico / k8s设置禁止从其节点传出连接?或者也许有人遇到过类似的问题?

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

1 回答

  • 1

    感谢您的评论,经过数小时的调查,我终于发现问题是错误配置kube-dns . 部署kube-dns时,它会自动从您的机器/etc/resolv.conf导入名称服务器列表 . 它工作得很好,除非你安装了systemd-resolve DNS服务器的ubuntu(默认安装它) . 它作为地址127.0.0.53活动的代理DNS服务器工作,并从pods内部 inaccesible . 这就是为什么即使在安装kube-dns并激活之后DNS名称服务器也无法访问的原因 .

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

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

    • 创建新的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"]
    
    • 重新部署kube-dns . 您的正确DNS现在应该可以使用

相关问题