Google Compute Engineで実行しているKubernetesクラスターがあり、外部サービスに静的IPアドレスを割り当てたい(type: LoadBalancer
)。これが現時点で可能かどうかはわかりません。そのトピックに関する次のソースを見つけました。
Webサービスを設定するときは、静的IPの使用が非常に重要だと思います。ここに何かが足りませんか?誰かがここで私を啓発してくれたらとても感謝しています!
編集:説明のために:Container Engineを使用していないので、Compute Engineの公式インストール手順を使用して自分でクラスターを設定します。 k8sサービスに関連付けられているすべてのIPアドレスは「一時的」とマークされています。つまり、kubernetesサービスを再作成すると、異なる外部IPアドレスが発生する可能性があります(静的である必要があるためです)。
Kubernetes v1.1はいくつかの変更を行います。
まず、GCEのすべてのロードバランサーは静的IPを取得します。これにより、GCEがサポートしていない「更新」操作をシミュレートできます。
2番目に、 https://github.com/kubernetes/kubernetes/pull/13005 は、ロードバランサーのIPを明示的に設定する新しいフィールドを提案します。
ただし、サービスが存在する限り、「一時的な」IPはあなたのものです。これは、AWSがELB名(ランダムに割り当てられ、リリースするまで自分の名前)で行う処理とほぼ同じです。
publicIP(またはv1の非推奨のPublicIP)は、非常に類似したセマンティクスを持つexternalIPに置き換えられます。これらは「管理されていない」IPです-kubernetesはそれらを使用してロードバランサーを確立しませんが、それらのトラフィックを受け入れます。
clusterIPはクラスター内アドレスであり、通常はクラスターまたは「プロジェクト」またはVPCの外部では使用できません(GCEまたはAWSの用語で)
TL; DRKubernetesを実行しているGoogle Container Enginev1.1はloadBalancerIP
は、最初に自動割り当てIPをstaticとしてマークするだけです。
Kubernetes v1.1は externalIPsをサポートしています :
apiVersion: v1
kind: Service
spec:
type: LoadBalancer
loadBalancerIP: 10.10.10.10
...
これまでのところ、GCEでそれを使用する方法に関して、本当に良い一貫したドキュメントはありません。確かなことは、このIPはまず事前に割り当てられたstaticIPの1つでなければならないということです。
クロスリージョンロードバランシング のドキュメントは、ほとんどがCompute Engine用であり、Kubernetes/Container Engine用ではありませんが、特に「ロードバランシングサービスの構成」の部分で役立ちます。
GCEでKubernetes LoadBalancerを作成するだけの場合、クラスター上のマシンで作成されたターゲットプールを指すネットワークCompute Engine> Network> Network load Balancing> Forwarding Rule(通常、サービスセレクターに一致するPodを実行しているもののみ)を作成します。名前空間を削除しても、作成されたルールはきれいにクリーンアップされないようです。
これは実際にサポートされています(文書化されていても):
loadBalancerIP
なしで1回展開し、kubectl get svc
の実行時に外部IPが割り当てられるまで待ち、そのページのリストでそのIPを検索し、EphemeralからStaticへ。loadBalancerIP=10.10.10.10
を使用します(Googleから提供されたIPに適応します)。これで、LoadBalancerまたは名前空間を削除しても、そのクラスターで再リプロイする際にそのIPアドレスが保持されます。
Kubernetesの記事 も参照してください。Kubernetesの単一または複数のドメインに静的IPを設定する方法について説明しています。
Google Container Engineで実行しており、type: LoadBalancer
を使用している場合、Google Cloud Platformは、このサービスにルーティングする静的IPアドレスを使用してNetwork Load Balancerを作成する必要があります。 IPアドレスを指定する必要はありません。
ネットワークロードバランサーのIPを見つけるには、次を実行します。
gcloud compute forwarding-rules list --project "YOUR-PROJECT-ID"
以下も実行できるはずです。
kubectl get services
これにより、サービスのクラスターと外部IPおよびポートの両方が返されます。