问题: 我有一个在kubernetes pod中运行的VOIP应用程序。我需要在代码中设置运行pod的主机的公共IP。如何通过API调用或kubernetes中的环境变量获取此IP? (如果相关,我会使用Google容器引擎。)非常感谢!
为什么我需要这个? 该应用程序是基于SIP的VOIP应用程序。当SIP请求进入并进行握手时,应用程序需要发回SIP邀请请求,该请求包含远程服务器必须用于为呼叫的音频部分建立RTP连接的公共IP和端口。 / p>
请注意: 我了解kubernetes服务以及通过负载均衡器公开这些服务的一般最佳实践。但是,我想使用hostNetwork = true并在主机上公开端口,以便远程应用程序直接发送RTP音频数据包(通过UDP)。这个kubernetes问题(https://github.com/kubernetes/kubernetes/issues/23864)包含对在kubernetes上运行基于SIP的VOIP应用程序的各种人的讨论,并且一般的使用是使用hostNetwork = true(主要是为了性能和由于负载平衡UDP的限制我相信)。
答案 0 :(得分:1)
您可以在API服务器中查询有关运行您的Pod的节点的信息,例如它的地址。由于您使用的是hostNetwork = true,因此$ HOSTNAME环境变量已经标识了该节点。
以下是一个在GCE上测试过的例子。
代码需要在pod中运行。您需要先安装一些python依赖项(在pod中):
pip install kubernetes
有更多信息可在: https://github.com/kubernetes-incubator/client-python
import os
from kubernetes import client, config
config.load_incluster_config()
v1=client.CoreV1Api()
for address in v1.read_node(os.environ['HOSTNAME']).status.addresses:
if address.type == 'ExternalIP':
print address.address