2017-01-29 8 views
2

質問: 私はkubernetesポッドで実行しているVOIPアプリケーションを持っています。ポッドが動作しているホストマシンのパブリックIPをコードに設定する必要があります。どのようにして、このIPをkubernetesのAPI呼び出しや環境変数経由で入手できますか? (関連性がある場合はGoogle Container Engineを使用しています)ありがとうございます!kubernetes podのパブリックIPを取得するにはどうすればよいですか?

なぜこれが必要ですか? アプリケーションはSIPベースのVOIPアプリケーションです。 SIP要求が着信してハンドシェイクを行う場合、アプリケーションは、リモートサーバがコールの音声部分のRTP接続を設定するために使用する必要があるパブリックIPとポートを含むSIP招待要求を送り返す必要があります。

注意:私はkubernetesサービスとロードバランサを介してそれらを公開する一般的なベストプラクティスについて認識しています。しかし、私はhostNetwork = trueを使用して、リモートアプリケーションが(UDP経由で)RTPオーディオパケットを直接送信するためにホスト上のポートを公開したいと思います。このkubernetesの問題(https://github.com/kubernetes/kubernetes/issues/23864)には、kubernetesでSIPベースのVOIPアプリケーションを実行しているさまざまな人々の議論が含まれており、一般的なconcessusはhostNetwork = trueを使用することです(主にパフォーマンスと負荷分散の制限により)。

+0

こんにちは - あなたは社会に新しいしているとして、あなたがしたい場合がありますコメントと投票/受諾システムがどのように動作するかを知るために、[誰かが私の質問に答えるとどうすればいいですか?](http://stackoverflow.com/help/someone-answers)ガイドを読んでください。 – pagid

答えて

1

ポッドを実行しているノードに関する情報をAPIサーバーに問い合わせることができます。 hostNetwork = trueを使用しているので、$ HOSTNAME環境変数は既にノードを識別します。

GCEでテストした例があります。

コードはポッドで実行する必要があります。あなたは(ポッドで)最初のいくつかのpythonの依存関係をインストールする必要があります。

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 
+0

完璧に感謝オシ私はそれが動作することを確認することができます。 – mleonard

+0

クイックフォローアップの質問:私は自分のアプリケーションに外部IPを取得する良い方法は、init - コンテナを使用することだと思う。 (https://kubernetes.io/docs/user-guide/pods/init-container/を参照)。私がよく分からないことは、initコンテナの環境変数としてipアドレスを保存した場合、メインコンテナがそれにアクセスできるかどうかです。 – mleonard

+1

またこれを読んでいる人のために:これはgoクライアントhttps://github.com/kubernetes/client-goでも達成できると確信しています。その利点は、他の場所でこれをコンパイルして1つのバイナリにすることができるため、ポッドや他の依存関係は必要ありません。 – mleonard

関連する問題