为啥 fluentd/kube-proxy/prometheus 的 GKE 中的 IP 地址等于节点地址

Posted

技术标签:

【中文标题】为啥 fluentd/kube-proxy/prometheus 的 GKE 中的 IP 地址等于节点地址【英文标题】:Why are IP adresses in GKE for fluentd / kube-proxy/prometheus equal to node addresses为什么 fluentd/kube-proxy/prometheus 的 GKE 中的 IP 地址等于节点地址 【发布时间】:2020-08-12 12:57:00 【问题描述】:

我在 GKE 上运行 Kubernetes 集群,我注意到在 kube-system 中 pod 的 IP 地址与

fluentd-gcp-...
kube-proxy-gke-gke-dev-cluster-default-pool-...
prometheus-to-...

和node的一样,其他的pod比如

event-exporter-v0.3.0-...
stackdriver-metadata-agent-cluster-level-...
fluentd-gcp-scaler-...
heapster-gke-...
kube-dns-...
l7-default-backend-...
metrics-server-v0.3.3-...

例如

kube-system   fluentd-gcp-scaler-bfd6cf8dd-58m8j                          1/1     Running   0          23h   10.36.1.6   dev-cluster-default-pool-c8a74531-96j4   <none>           <none>
kube-system   fluentd-gcp-v3.1.1-24n5s                                    2/2     Running   0          24h   10.10.1.5   dev-cluster-default-pool-c8a74531-96j4   <none>           <none>

其中 pod IP 范围为:10.36.0.0/14

节点位于 10.10.1.0/24

在 pod 地址范围内有 IP 地址。前三个具体是什么?

【问题讨论】:

【参考方案1】:

这是因为 kube proxy、Fluentd、Prometheus 等 Pod 直接通过 hostNetwork: true 在宿主网络中运行。您可以描述这些 pod 并验证 hostNetwork: true 是否存在。

现在来看看为什么这些 pod 需要首先在主机网络中运行,kube 代理需要访问主机的 IP 表,prometheus 收集指标,Fluentd 从主机系统收集日志。

您可以使用hostNetwork: true 部署一个示例 pod,例如 nginx,它将获取节点 IP。如果您删除 hostNetwork: true,它将从 pod CIDR 范围获取 IP。

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx
  restartPolicy: Always
  hostNetwork: true

【讨论】:

我无法使用 describe 找到这些 pod 的 hostNetwork,但原因是有道理的。感谢您的澄清! @Mike 它以 yaml 格式显示。它没有显示在 describe 命令中,运行:kgp KUBE_PROXY_POD_NAME -n kube-system -o yaml | grep hostNetwork 你会得到输出。

以上是关于为啥 fluentd/kube-proxy/prometheus 的 GKE 中的 IP 地址等于节点地址的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?