在 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 看起來很有希望,但顯然它們不能以適合此目的的方式使用。如果我可以直接引用使用它定義的靜態 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
軟體包中可用。