[英]How to access the service ip in kubernetes by name?
说我是否有如下的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
是否可以通过某种选择器在第二次部署中将服务ip设置为环境变量? 换句话说,第二个部署yaml中的value: XXXXXXXXXX
应该为value: XXXXXXXXXX
。 (请注意,我知道我可以通过kubectl get services
获取服务ip,但是我想知道如何通过服务名称或标签来设置它)。 欢迎任何建议!
kubernetes将服务的主机,端口,协议等环境变量注入到pod容器中(请参阅此文档 )。
kubectl exec <pod> printenv
是检查设置了哪些env变量的一种方法。
如果服务是在Pod之后创建的,则可能不存在env var,因此终止(重新启动)Pod是确保填充新环境变量的一种方法。
约定通常为大写<SERVICE_NAME>_SERVICE_HOST
。 您可以使用以下语法在pod规范中显式设置它。
- name: rabbitmq_url value: $(MY-RABBITMQ_SERVICE_HOST)
请记住,变量已由k8s注入,这只是对其进行别名。 您可能需要在应用程序层/ script中更新引用,以将k8s注入的环境变量用于服务。
两行之间的阅读(希望对您有所帮助):
K8s在每个吊舱内自动为您创建服务环境变量。 有关详细信息,请参见https://kubernetes.io/docs/concepts/services-networking/service/#environment-variables 。
另一种方法是启用kube dns,在这种情况下,只需使用服务名称就可以联系服务IP。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.