Kubernetes为每个容器分配一个IP地址,但是如何从Pod中的容器中获取IP地址?我无法从文件中找到方法.
Pie*_*syP 145
最简单的答案是确保您的pod或复制控制器yaml/json文件通过添加下面定义的配置块将pod IP添加为环境变量.(下面的块另外使pod的名称和命名空间可用)
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
Run Code Online (Sandbox Code Playgroud)
重新创建pod/rc,然后尝试
echo $MY_POD_IP
Run Code Online (Sandbox Code Playgroud)
还跑去env看看kubernetes为你提供了什么.
干杯
Elo*_*ven 22
一些澄清(不是真正的答案)
在kubernetes中,每个pod都被分配了一个IP地址,并且pod中的每个容器都被分配了相同的IP地址.因此,正如Alex Robinson在他的回答中所述,您可以hostname -i在容器内使用以获取pod IP地址.
我测试了一个运行两个哑容器的pod,实际上hostname -i是在两个容器内输出相同的IP地址.此外,该IP等同于kubectl describe pod从外部获得的IP ,这证实了整个IMO.
然而,PiersyP的答案对我来说似乎更干净.
pod中的应用程序都使用相同的网络命名空间(相同的IP和端口空间),因此可以相互"查找"并使用localhost进行通信.因此,pod中的应用程序必须协调它们对端口的使用.每个pod在平面共享网络空间中具有IP地址,该网络空间与网络上的其他物理计算机和pod完全通信.
来自kubernetes docs的另一篇文章:
到目前为止,这份文件已经讨论过容器.实际上,Kubernetes在Pod范围应用IP地址 - Pod中的容器共享其网络命名空间 - 包括其IP地址.这意味着Pod中的容器都可以在localhost上到达彼此的端口.
mib*_*bit 21
kubectl describe pods <name of pod> 会给你一些信息,包括IP
小智 15
POD_HOST=$(kubectl get pod $POD_NAME --template={{.status.podIP}})
Run Code Online (Sandbox Code Playgroud)
此命令将返回一个IP
Ale*_*son 14
容器的IP地址应该在其网络命名空间内正确配置,因此任何标准的linux工具都可以获得它.例如,尝试ifconfig,ip addr show,hostname -I,等从附接外壳的容器中的一个中对其进行测试.
Ada*_*nek 13
你可以用
kubectl describe pod `hostname` | grep IP | sed -E 's/IP:[[:space:]]+//'
Run Code Online (Sandbox Code Playgroud)
这是基于@mibbit的建议.
这需要考虑以下事实:
kubectl 手动放置在容器中(可能是在构建图像时)/var/run/secrets/kubernetes.io/serviceaccount在容器中所述记住比使用sed方法更简单awk.
这是一个示例,您可以在本地计算机上运行:
kubectl describe pod `<podName>` | grep IP | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)
因此,IP本身位于输出的第2列$2.
| 归档时间: |
|
| 查看次数: |
89156 次 |
| 最近记录: |