为啥 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,为啥它受到保护?