如果我有rabbitmq
服务,请说明如下:
apiVersion: v1
kind: Service
metadata:
name: my-rabbitmq
spec:
ports:
- port: 6379
selector:
app: my-rabbitmq
我还有另一个部署:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: A-worker
spec:
replicas: 1
containers:
- name: a-worker
image: worker-image
ports:
- containerPort: 80
env:
- name: rabbitmq_url
value: XXXXXXXXXXXXX
有没有办法在某种选择器的第二次部署中将service ip设置为环境变量?换句话说,在第二个部署yaml中应该转到value: XXXXXXXXXX
。 (注意我知道我可以通过kubectl get services
获取服务ip,但我想知道如何通过服务名称或标签来设置它。欢迎任何建议!
答案 0 :(得分:1)
kubernetes将服务的主机,端口,协议等环境变量注入到pod容器中(参见this doc)。
kubectl exec <pod> printenv
是检查设置了哪些env变量的一种方法。
如果在pod之后创建了服务,则env var可能不存在,因此终止pod(重新启动)是确保填充新环境变量的一种方法。
约定通常是大写<SERVICE_NAME>_SERVICE_HOST
。
您可以使用以下语法在pod规范中显式设置它。
- name: rabbitmq_url value: $(MY-RABBITMQ_SERVICE_HOST)
请记住,变量已经被k8s注入,这只是它的混叠。您可能希望更新应用程序层/脚本中的引用,以便为服务使用k8s注入的环境变量。
答案 1 :(得分:1)
在线之间阅读(我希望这会有所帮助):
K8s会在每个pod中自动为您创建服务环境变量。有关详细信息,请参阅https://kubernetes.io/docs/concepts/services-networking/service/#environment-variables。
另一条路线是启用kube dns,在这种情况下,只需使用服务名即可联系服务IP。