Google Kubernetes EngineでKubernetesロードバランサーの外部IPアドレスを選択する方法


16

Google Kubernetes Engineを使用してWebアプリをデプロイしていますが、使用するドメイン名がGoogle Cloud Platformの同じプロジェクトの一部として制御する既存の静的IPアドレスのロードバランサーを介してアクセスできるようにしたいすでにこのIPを指している。

ポッドに使用したyamlファイルは次のとおりです。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
  - name: my-container
    image: gcr.io/my-project/my-app:latest

次を使用してロードバランサーを設定できます。

apiVersion: v1
kind: Service
metadata:
  name: my-load-balancer
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: my-app
  type: LoadBalancer

これにより、アプリにアクセスできる外部IPが提供されますが、必要なIPを使用するように構成する方法が見つかりません。サービスマニュアルには spec.clusterIP設定に言及したが、これは外部IPに関連していないようです。同様に、ロードバランサーが設定されると、サービスのstatus.loadBalancer.ingress.ipフィールドは外部IPアドレスに設定されますが、これは構成可能な設定ではないようです。

別の方法として、Google Compute Engineコンソールで転送ルールを手動で作成して、静的IPアドレスからKubernetesによって設定されたターゲットプールにトラフィックを転送しようとしましたが、接続しようとすると接続が拒否されます。

私が望むことをする方法はありますか?選択した静的IPアドレスのGoogle KubernetesエンジンでKubernetesポッド(またはレプリケーションコントローラー)を公開する方法はありますか?

回答:


9

TL; DR Kubernetes v1.1を実行するGoogle Container Engine loadBalancerIPは、最初に自動割り当てIPを静的としてマークするだけをサポートします

Kubernetes v1.1はexternalIPをサポートしています

apiVersion: v1
kind: Service
spec:
  type: LoadBalancer
  loadBalancerIP: 10.10.10.10
  ...

これまでのところ、GCEでそれを使用する方法に関して、本当に良い一貫したドキュメントはありません。確かなことは、このIPはまず事前に割り当てられた静的 IPの1つでなければならないということです。

クロス領域のロードバランシングのドキュメントはCompute Engineのため、ほとんどありませんKubernetes /コンテナエンジンが、それは特に部「の設定サービスをロードバランシング」まだ便利です。

GCEでKubernetes LoadBalancerを作成する場合、クラスター上のマシンで作成されたターゲットプールを指すネットワークCompute Engine> Network> Network load Balancing> Forwarding Ruleを作成します(通常、サービスセレクターに一致するPodを実行しているもののみ) 。名前空間を削除しても、作成されたルールはきれいにクリーンアップされないようです。


更新

実際にサポートされています(文書化されていませんが):

  1. Kubernetes 1.1以降を実行していることを確認します(GKEの下でクラスターを編集し、「ノードバージョン」を確認します)
  2. ネットワーク)>(外部IPアドレス)の下で、クラスターのVMインスタンスを指すものとしてマークされたエフェメラルが既にあるはずです(わからない場合は一度展開せずloadBalancerIP、実行時に外部IPが割り当てられるまで待ちkubectl get svc、そのIPをそのページのリスト)。それらの1つを静的としてマークし、外部アドレスがであるとしましょう10.10.10.10
  3. LoadBalancerを編集してloadBalancerIP=10.10.10.10上記のようにします(Googleから提供されたIPに適応します)。

これで、LoadBalancerまたは名前空間を削除した場合、そのクラスターで再リプロイする際にそのIPアドレスが保持されるはずです。クラスターを変更する必要がある場合は、いくつかの手動操作が可能です。

  1. [ ネットワーク負荷分散]セクションの[ターゲットプール]タブで、[ターゲットプールの作成]ボタンをクリックします。
    • 名前:(cluster-poolまたはその他の名前)
    • 地域:クラスターのいずれかの地域を選択します
    • ヘルスチェック:オプション、必要に応じて
    • 既存のインスタンスグループを選択:Kubernetesクラスター
  2. [ ネットワーク負荷分散]セクションの[転送ルール]タブで、[転送ルールの作成]ボタンをクリックします。
    • 名前:(http-cross-region-gfrまたはその他の名前)
    • 地域:クラスターのいずれかの地域を選択します
    • 外部IP:loadbalancer-ip-crossregion予約したばかりのものを選択
    • ターゲットプール:cluster-pool作成したばかりの選択

それらはまだ関連していますか?
ベン

8

良いニュース。これはKubernetes v1.1で修正される予定です。service.spec.loadBalancerIP所有していることがわかっているIPにフィールドを設定できます。


前:

これは、亀裂を通過した機能です。正常に機能するはずでしたが(ある時点で機能している場合もあります)、十分にテストされておらず、途中で破損し、その後(一時的に)偶然に設計されました。

1.0以降に修正するもののショートリストに載っています。

https://github.com/GoogleCloudPlatform/kubernetes/issues/10323


これはおそらくコメントであり、回答ではありません。
区-モニカの復職

5
@Ward:DEVから「それは不可能です」、私見答え、それは、そのようなものとして受け入れられました。
スヴェン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.