Environment-Variables

在 Kubernetes 部署規範中使用環境變數

  • April 11, 2017

我目前使用 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 和ConfigMaps 看起來很有希望,但顯然它們不能以適合此目的的方式使用。如果我可以直接引用使用它定義的靜態 IP 地址gcloud compute addresses create service-address將是最好的。

還有另一個令人愉快的簡單解決方案:我my-address定義了一個Google計算地址,我顯然可以在服務規範中使用它,如下所示loadBalancerIP: my-address

有了它作為 IP 地址和密碼機密的“外部”來源,我的簡單案例(在 GKE 環境中)不再需要配置工具(或模板)。

現已過時: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 -

一個更簡單/更清潔的解決方案:envsubst

在 deploy.yml 中:

LoadbalancerIP: $LBIP

然後只需創建您的 env var 並像這樣執行 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/Debiangettext軟體包中可用。

引用自:https://serverfault.com/questions/791715