我目前使用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显然,这个特定的语法还不起作用。但是这样的事情有可能吗?如果可能的话,怎么可能?
我不喜欢依赖单独的供应工具。秘密s和ConfigMaps看上去很有前途,但显然他们不能以适合这个目的的方式消费。如果我可以直接引用用gcloud compute addresses create service-address定义的静态IP地址,那将是最好的。
发布于 2017-04-11 12:47:15
一个更容易/更干净的解决方案:envsubst
在deploy.yml中:
LoadbalancerIP: $LBIP然后创建env var并运行kubectl,如下所示:
export LBIP="1.2.3.4"
envsubst < deploy.yml | kubectl apply -f -您只需将常规Bash变量放入您想要使用的任何文件,在本例中是YAML清单,并让ensubst读取该文件。它将输出文件,并将env替换为它们的值。您还可以使用它创建如下新文件:
envsubst < input.yml > output.ymlenvsubst可以在例如Ubuntu/Debian gettext包中使用。
发布于 2016-07-26 14:27:54
您可以编写一个简单的预处理器来对yaml文件进行变量替换(也可以使用jsonnet在json配置文件上完成相同的任务)。
有一些关于将模板直接添加到Kubernetes配置中的讨论,但它还没有实现或可用。
发布于 2016-07-30 15:22:40
在模板可用之前,最简单的方法是运行使用Kubernetes API更新服务的作业。在一个基于高山的映像中,一个简短的shell脚本,再加上一个秘密(包含IP地址)和一个configmap (包含模板),应该非常简单。难点在于正确使用apiserver的身份验证和授权特性。
https://stackoverflow.com/questions/30690186/how-do-i-access-the-kubernetes-api-from-within-a-pod-container给出了一个访问API的示例。显然,您希望在该示例中发布到/api/v1/命名空间/默认/服务,而不是GET。
https://serverfault.com/questions/791715
复制相似问题