私はGoogle Kubernetes Engineを使用してウェブアプリをデプロイしていますが、使用したいドメイン名のため、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を使用するようにアプリを構成する方法が見つかりません。 services documentation はspec.clusterIP設定について言及していますが、これは外部IPとは関係がないようです。同様に、ロードバランサーがセットアップされると、サービスのstatus.loadBalancer.ingress.ipフィールドはその外部IPアドレスに設定されますが、これは構成可能な設定ではないようです。
別の方法として、Google Compute Engineコンソールで手動で転送ルールを作成して、静的IPアドレスからKubernetesによって設定されたターゲットプールにトラフィックを転送しようとしましたが、接続しようとすると接続が拒否されました。
選択した静的IPアドレスのGoogle KubernetesエンジンでKubernetesポッド(またはレプリケーションコントローラ)を公開する方法はありますか?
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は事前に割り当てられた静的IPの1つでなければなりません。
クロスリージョン負荷分散 のドキュメントは、ほとんどがCompute Engine向けであり、Kubernetes/Container Engine向けではありませんが、特に「負荷分散サービスの構成」の部分は引き続き役立ちます。
GCEでKubernetes LoadBalancerを作成するだけの場合、クラスター上のマシンで構成されるターゲットプールを指すネットワークCompute Engine>ネットワーク>ネットワーク負荷分散>転送ルールが作成されます(通常、サービスセレクターに一致するポッドを実行するもののみ) 。名前空間を削除しても、作成されたルールが適切にクリーンアップされないようです。
これは実際にサポートされています(たとえ文書化されていても):
loadBalancerIP
なしで1回デプロイし、kubectl get svc
を実行するときに外部IPが割り当てられるまで待機し、そのページのリストでそのIPを検索します。そのうちの1つをstatic、たとえば外部アドレスは10.10.10.10
としましょう。loadBalancerIP=10.10.10.10
にします(Googleから提供されたIPに適応します)。LoadBalancerまたはネームスペースを削除しても、そのクラスターで再利用するときにそのIPアドレスが保持されるはずです。クラスターを変更する必要がある場合は、手動で操作する必要があります。
cluster-pool
(またはその他の名前)http-cross-region-gfr
(またはその他の名前)loadbalancer-ip-crossregion
を選択しますcluster-pool
を選択します朗報です。これはKubernetes v1.1で修正されます。 service.spec.loadBalancerIP
フィールドを所有しているIPに設定します。
前:
これは、亀裂から抜け出した機能です。動作するはずでしたが(ある時点で動作することもありました)、十分にテストされておらず、途中で壊れてしまい、誤って(一時的に)設計されました。
それは、1.0以降に修正するものの私の最終リストにあります。
https://github.com/GoogleCloudPlatform/kubernetes/issues/1032