我目前使用 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,那就最好了。
我有一种情况,Kubernetes 显然无法再为kubectl create -f Deployment.yaml. kubectl describe service <my-service>报告以下错误:
CreatingLoadBalancerFailed
Error creating load balancer (will retry): Failed to create load balancer
for service default/<my-service>: requested ip <my-address> is
neither static nor assigned to LB <id>(default/<my-service>): <nil>
Run Code Online (Sandbox Code Playgroud)
但gcloud compute addresses list表示my-address是静态IP地址:
NAME REGION ADDRESS STATUS
<my-address> europe-west1 <ip-address> RESERVED
Run Code Online (Sandbox Code Playgroud)
并Deployment.yaml包含<my-service>分配<my-address>给负载均衡器的规范:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: UDP
port: …Run Code Online (Sandbox Code Playgroud)