【问题标题】:"kubectl logs" not working after adding NAT gateways in GCE在 GCE 中添加 NAT 网关后“kubectl 日志”不起作用
【发布时间】:2018-09-18 04:23:19
【问题描述】:

我所做的是按照https://cloud.google.com/vpc/docs/special-configurations 中“构建高可用性和高带宽 NAT 网关”部分中的说明进行操作,在我用“no-ip”标记所有实例后,我不再能够访问使用“kubectl 日志”的 pod 日志。

是因为 kubectl logs 在后台使用 ssh 吗?是否有任何解决方法可以查看 pod 日志?

【问题讨论】:

  • 它应该仍然可以工作,kubectl logs 与您的 master 上的 k8s api-server 交互,然后 master 从容器中检索日志(有效地在节点上运行 docker logs)并将信息发送回给您.您收到的错误消息是什么?
  • 另外,kubectl 日志是唯一失败的命令吗?
  • @PatrickW "kubectl logs" 和 "kubectl exec" 都失败了。我原以为“kubectl exec”会失败,因为它在底层使用 ssh,而且我知道一旦该节点的出站连接通过 NAT,使用其公共 IP 连接到节点会失败。
  • 无论何时运行 kubectl 命令,它都会与主服务器上的 API 服务器交互。然后主节点使用 SSH 连接到节点。我认为我们需要更多有关您如何设置基础架构的详细信息(有关 NAT 以及通过它引导的流量的更多详细信息)
  • @PatrickW 我明白了,目前来自我节点的出站连接都通过 NAT 网关,这可能是主节点无法 ssh 进入节点的原因。我将尝试添加一个路由规则,以便从节点到主节点的出站连接不会通过 NAT 网关。怎么知道master的IP?

标签: kubernetes google-compute-engine nat google-kubernetes-engine


【解决方案1】:

它使用kube-proxy 连接到节点,然后从那里查看容器中的日志,就像docker logs <container-name> 那样。然后它将输出代理返回到您正在运行kubectl 的任何位置。

Kubernetes 在其所有节点中使用大量 iptables 和路由,因此您对运行它的实例所做的任何更改都会影响组件之间的通信方式。检查“no-ip”标签是否使其更改/添加/删除运行 Kubernetes 节点的防火墙规则。

希望对你有帮助!

【讨论】:

    【解决方案2】:

    正如帕特里克所说,您需要一个新的路由规则来帮助所有流量通过默认网关而不是 NAT 到达主节点。请关注此NAT configuration specifically for GKE,其中提到了附加路线。

    kubectl logs 与您的 master 上的 k8s api-server 交互,然后 master 从容器中检索日志(有效地在节点上运行 docker logs)并将信息发送回给您。每当您运行 kubectl 命令时,它都会与主服务器上的 API 服务器交互。然后主节点使用 SSH 连接到节点。您还可以通过运行 kubectl get endpoint 找到 master 的 IP。 “kubernetes”端点是您的主端点的 IP。

    【讨论】:

      猜你喜欢
      • 2021-11-08
      • 1970-01-01
      • 2013-07-11
      • 2021-02-09
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多