簡體   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