簡體   English   中英

通過 clusterIP 服務將 Pod 連接到 Pod?

[英]Connect Pod to Pod through clusterIP service?

我已經閱讀了幾篇關於 clusterIP abd nodeport 服務如何工作的文章(比如這個博客

假設我有 3 個不同的基於微服務的 web 應用程序,每個應用程序都在三個單獨的節點上運行。 每個運行兩個副本集。

我的理解是,應用程序副本集將有單獨的 clusterIP 服務,而不是所有應用程序類型的單個 clusterIP 服務。 那是對的嗎? 現在如果一個 pod 需要連接到另一個 pod,它會調用相應的 clusterIP 服務連接到正確的 pod 嗎?

是的,這是正確的。
實際上,您需要忘記pod 的概念。

如您所說,您創建了 3 個基於 web 的微服務 所以這里正確的術語(和需要)是從(微)服務 B聯系(微)服務 A 為此,您需要為每個ReplicaSet創建kind: Service

例如:

---
# This is one micro-service based on Nginx
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:alpine
          ports:
            - containerPort: 80
---
# This is the ClusterIp service corresponding
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
  - port: 8080
    targetPort: 80

在上面的示例中,我們有兩個基於 Nginx 的微服務副本。 我們還有一個 ClusterIP kind: Service

現在,如果我們想從另一個 pod 聯系 nginx,我們需要做的就是使用集群內部配置的服務名稱和端口。 在我們的例子中,它將是nginx:8080

要嘗試這樣做,您需要創建一個 pod 來作為集群中的入口點:

---
apiVersion: v1
kind: Pod
metadata:
  name: gateway
spec:
  containers:
  - image: centos:7
    name: gateway
    command: ["bash", "-c", "sleep infinity"]

現在,如果您想從集群中聯系您的 nginx 應用程序,您必須執行以下命令:

kubectl exec -ti gateway curl nginx:8080

是的,設計看起來不錯,對於每個微服務,您都可以部署服務和部署對象。

您始終可以將 ssh 放入任何 pod,然后在其中鍵入 nslookup“service_name”,它將為您提供完全限定的域名,您可以隨時使用該域名進行連接,如果您的應用程序可以與 HTTP 進行通信,那么您可以嘗試這樣(在做之后ssh 成 POD)

curl http://service-name.namespace.cluster.local:port

或者您也可以執行 nslookup pod-name。

如果您想啟用 pod 之間的連接,您可以在常規 ClusterIP 之上添加一個 Headless 服務(順便說一句,這是正確的)。

無頭服務為部署的每個 pod 提供 DNS 條目。 使用以下語法解析請求:

<pod_name>.<headless_svc_name>

在這種情況下,我建議您使用 Statefulset 部署:pod 獲得穩定的名稱,例如“pod-0”、“pod-1”......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM