Dru*_*rux 20 environment-variables kubernetes google-kubernetes-engine
我目前使用 Kubernetes 规范Deployment.yaml来部署服务。该规范包括对特定 IP 地址的逐字引用(标记<static-ip-address>如下):
spec:
type: LoadBalancer
loadBalancerIP: <static-ip-address>
Run Code Online (Sandbox Code Playgroud)
我担心将密码或 IP 地址等信息推送到远程 Git 存储库中。我可以通过使用环境变量来避免这种情况,例如使用部署规范和实际部署大致如下:
spec:
type: LoadBalancer
loadBalancerIP: ${SERVICE_ADDRESS}
Run Code Online (Sandbox Code Playgroud)
和
export SERVICE_ADDRESS=<static-ip-address>
kubectl create -f Deployment.yaml
Run Code Online (Sandbox Code Playgroud)
显然,这种特定的语法还不起作用。但是这样的事情可能吗,如果有的话怎么办?
我宁愿不依赖单独的配置工具。Secret s 和ConfigMaps 看起来很有希望,但显然不能以适合此目的的方式使用它们。如果我可以直接引用用它定义的静态 IP 地址gcloud compute addresses create service-address,那就最好了。
小智 32
一个更简单/更清洁的解决方案: envsubst
在 deploy.yml 中:
LoadbalancerIP: $LBIP
Run Code Online (Sandbox Code Playgroud)
然后只需创建您的 env var 并像这样运行 kubectl:
export LBIP="1.2.3.4"
envsubst < deploy.yml | kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)
您只需将常规 Bash 变量放入您想要使用的任何文件中,在本例中为 YAML 清单,并让 ensubst 读取该文件。它将输出文件,其中 env vars 替换为它们的值。您还可以使用它来创建新文件,如下所示:
envsubst < input.yml > output.yml
Run Code Online (Sandbox Code Playgroud)
envsubst可在例如 Ubuntu/Debiangettext包中使用。
还有另一个令人愉快的简单解决方案:我my-address定义了一个 Google 计算地址,并且我显然可以在服务规范中使用它,如下所示loadBalancerIP: my-address:
以此作为 IP 地址和密码秘密的“外部”来源,我的简单用例(在 GKE 环境内)不再需要配置工具(或模板)。
现在已过时:sed毕竟,我决定使用某种配置工具,即“内置”工具。
我Deployment.yaml现在包含一个“模板变量”,例如
loadBalancerIP: $$EXTERNAL_IP
Run Code Online (Sandbox Code Playgroud)
我使用 1.2.3.4 作为外部 IP 地址来部署服务
cat Deployment.yaml | sed s/\$\$EXTERNAL_IP/1.2.3.4/ | kubectl create -f -
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30273 次 |
| 最近记录: |