繁体   English   中英

如何按名称访问kubernetes中的服务IP?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM