web-dev-qa-db-ja.com

Kubernetesロードバランサーの静的IPアドレスを指定する方法

Google Compute Engineで実行しているKubernetesクラスターがあり、外部サービスに静的IPアドレスを割り当てたい(type: LoadBalancer)。これが現時点で可能かどうかはわかりません。そのトピックに関する次のソースを見つけました。

  • Kubernetes Service Documentation 外部IPアドレスを定義できますが、で失敗し、オブジェクトを[] v1.LoadBalancerIngress型のGo値に非整列化できません
  • publicIPs field は、外部IPを指定できるように思われますが、どちらも機能していないようです
  • このGithubの問題 は、私がやろうとしていることはまだサポートされていないが、Kubernetes v1.1でサポートされることを示しています
  • clusterIPフィールド を使用してもIPアドレスを指定できますが、「provided IP is not a valid range」で失敗します

Webサービスを設定するときは、静的IPの使用が非常に重要だと思います。ここに何かが足りませんか?誰かがここで私を啓発してくれたらとても感謝しています!

編集:説明のために:Container Engineを使用していないので、Compute Engineの公式インストール手順を使用して自分でクラスターを設定します。 k8sサービスに関連付けられているすべてのIPアドレスは「一時的」とマークされています。つまり、kubernetesサービスを再作成すると、異なる外部IPアドレスが発生する可能性があります(静的である必要があるためです)。

25
Marco Lamina

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の用語で)

13
Tim Hockin

TL; DRKubernetesを実行しているGoogle Container Enginev1.1loadBalancerIPは、最初に自動割り当て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を実行しているもののみ)を作成します。名前空間を削除しても、作成されたルールはきれいにクリーンアップされないようです。


更新

これは実際にサポートされています(文書化されていても):

  1. Kubernetes 1.1以降を実行していることを確認します( [〜#〜] gke [〜#〜] クラスターを編集し、[ノードバージョン]を確認します)
  2. Networking> External IPアドレス の下に静的IPを割り当てます:
    • loadBalancerIPなしで1回展開し、kubectl get svcの実行時に外部IPが割り当てられるまで待ち、そのページのリストでそのIPを検索し、EphemeralからStaticへ。
    • クラスターの領域で[なし]に接続されている[静的アドレスの予約]をクリックします。
  3. LoadBalancerを編集して、上記のloadBalancerIP=10.10.10.10を使用します(Googleから提供されたIPに適応します)。

これで、LoadBalancerまたは名前空間を削除しても、そのクラスターで再リプロイする際にそのIPアドレスが保持されます。


更新2016-11-14

Kubernetesの記事 も参照してください。Kubernetesの単一または複数のドメインに静的IPを設定する方法について説明しています。

44
Wernight

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およびポートの両方が返されます。

1
Sandeep Dinesh