web-dev-qa-db-ja.com

Kubernetesデプロイメント仕様での環境変数の使用

現在、サービスのデプロイにKubernetes仕様Deployment.yamlを使用しています。仕様には、特定のIPアドレスへの逐語的参照が含まれています(以下で<static-ip-address>とマークされています)。

spec:
  type: LoadBalancer
  loadBalancerIP: <static-ip-address>

パスワードやIPアドレスなどの情報をリモートGitリポジトリーにプッシュすることについて心配しています。これを回避できますか?環境変数を利用することにより、例えば展開仕様と実際の展開は、おおよそ次のようになります。

spec:
   type: LoadBalancer
   loadBalancerIP: ${SERVICE_ADDRESS}

そして

export SERVICE_ADDRESS=<static-ip-address>
kubectl create -f Deployment.yaml

明らかに、この特定の構文はまだ機能していません。しかし、このようなことは可能でしょうか?

別の プロビジョニングツール に依存しない方がいいです。 Secret sおよび ConfigMap sは有望に思えますが、この目的に適した方法で消費することはできません。 gcloud compute addresses create service-addressで定義された静的IPアドレスを直接参照できるとしたら、それが最善です。

18
Drux

もう1つの心地よいシンプルな解決策がありました。Googleコンピューティングアドレスmy-addressを定義してあり、サービス仕様でloadBalancerIP: my-addressのように使用できるようです。

これをIPアドレスの「外部」ソースおよびパスワードのシークレットとして使用することで、(GKE環境内での)単純な使用例のためのプロビジョニングツール(またはテンプレート)は不要になります。

OBSOLETE NOW:結局のところ、ある種のプロビジョニングツール、つまり「組み込み」sedを使用することにしました。

私のDeployment.yamlには、「テンプレート変数」が含まれています。に

loadBalancerIP: $$EXTERNAL_IP

そして、例えば1.2.3.4でサービスを外部IPアドレスとしてデプロイします

cat Deployment.yaml | sed s/\$\$EXTERNAL_IP/1.2.3.4/ | kubectl create -f -
2
Drux

より簡単でクリーンなソリューション:envsubst

Deploy.ymlで:

LoadbalancerIP: $LBIP

次に、環境変数を作成し、kubectlを次のように実行します。

export LBIP="1.2.3.4"
envsubst < deploy.yml | kubectl apply -f -

通常のBash変数を使用したいファイル(この場合はYAMLマニフェスト)に挿入し、ensubstにそのファイルを読み取らせます。 env varsをそれらの値で置き換えたファイルを出力します。これを使用して、次のような新しいファイルを作成することもできます。

envsubst < input.yml > output.yml

envsubstは、たとえば、 Ubuntu/Debian gettextパッケージ。

29
Jan Grewe

テンプレート が利用可能になるまで、それを行う最も簡単な方法は、サービスを更新するジョブを実行することです Kubernetes APIを使用 。シークレット(IPアドレスを含む)とconfigmap(テンプレートを含む)を組み合わせた、アルパインベースのイメージの短いシェルスクリプトは、十分に単純でなければなりません。難しい点は、apiserverの認証および承認機能を正しく使用していることです。

https://stackoverflow.com/questions/30690186/how-do-i-access-the-kubernetes-api-from-within-a-pod-container は、APIへのアクセス例を示しています。明らかに、その例ではGETの代わりにPOST to / api/v1/namespaces/default/services にする必要があります。

0
aecolley

簡単なプリプロセッサを作成して、yamlファイルで変数を置換できます(または jsonnet を使用して、json構成ファイルで同じことを実行できます)。

テンプレートをKubernetes構成に直接追加する についていくつかの議論がありますが、まだ実装されていないか、利用できません。

0
Robert Bailey