簡體   English   中英

如何通過 kubernetes 集群(minikube)路由測試流量?

[英]How to route test traffic through kubernetes cluster (minikube)?

我有一個帶有兩個 pod 的 minikube 集群(帶有 ubuntu 容器)。 我需要做的是通過這個 minikube 集群將測試流量從一個端口路由到另一個端口。 該流量應該通過這兩個 pod 發送,如圖所示。 我是這個 Kubernetes 東西的初學者,所以我真的不知道該怎么做以及 go 的方式......請幫助我或給我一些提示。

我正在使用 ubuntu 服務器版本。 18.04。

在此處輸入圖像描述

我同意@Harsh Manvar 提供的答案,並且我還想就這個話題進行一些擴展。

已經有類似設置的答案。 我鼓勵你檢查一下:

有不同的驅動程序可用於運行您的minikube 在處理入站流量時,它們會有所不同。 我錯過了關於設置中使用的驅動程序的部分(評論)。 如果是標簽中顯示的Docker ,您可以按照以下示例進行操作。


例子

腳步:

  • nginx-onenginx-two Deployments來模仿鏡像中的Pods
  • 創建一個服務,用於將流量從nginx-one發送到nginx-two
  • 創建一個允許您從 LAN 連接到nginx-one的服務
  • 測試設置

nginx-onenginx-two Deployments來模仿鏡像中的Pods

您可以使用以下定義來生成兩個Deployments ,其中每個部署都有一個Pod

  • nginx-one.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-one
spec:
  selector:
    matchLabels:
      app: nginx-one
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx-one
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
  • nginx-two.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-two
spec:
  selector:
    matchLabels:
      app: nginx-two
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx-two
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

創建一個服務,用於將流量從nginx-one發送到nginx-two

您將需要使用Service將流量從nginx-one發送到nginx-two 此類Service的示例如下:

apiVersion: v1
kind: Service
metadata:
  name: nginx-two-service
spec:
  type: ClusterIP # could be changed to NodePort
  selector:
    app: nginx-two # IMPORTANT
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 80

應用此定義后,您將能夠使用服務名稱( nginx-two-service )將流量發送到nginx-two

旁注!

您可以在沒有Service的情況下使用Pod的 IP,但這不是推薦的方式。

創建一個允許您從 LAN 連接到nginx-one的服務

假設您想使用Docker驅動程序將您的minikube實例公開到 LAN,您將需要創建一個服務並公開它。 此類設置的示例如下:

apiVersion: v1
kind: Service
metadata:
  name: nginx-one-service
spec:
  type: ClusterIP # could be changed to NodePort
  selector:
    app: nginx-one # IMPORTANT
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 80

您還需要運行:

  • $ kubectl port-forward --address 0.0.0.0 service/nginx-one-service 8000:80

上面的命令(在您的minikube主機上運行!)將公開您的nginx-one-service以在 LAN 上可用。 它將運行此命令的機器上的 map 端口 8000 連接到此服務的端口 80。 您可以通過在 LAN 的另一台機器上執行來檢查它:

  • curl IP_ADDRESS_OF_MINIKUBE_HOST:8000

旁注!

您需要 root 訪問權限才能讓您的入站流量進入小於 1024 的端口。

測試設置

您將需要檢查對象之間是否存在通信,如下面的“連接圖”所示。

PC -> nginx-one -> nginx-two -> example.com

測試方法可能如下:

PC -> nginx-one

  • 在 LAN 中的機器上運行:
    • curl MINIKUBE_IP_ADDRESS:8000

nginx-one -> nginx-two

  • 執行到您的nginx-one Pod並運行命令:
    • $ kubectl exec -it NGINX_POD_ONE_NAME -- /bin/bash
    • $ curl nginx-two-service

nginx-two -> example.com

  • 執行到您的nginx-two Pod並運行命令:
    • $ kubectl exec -it NGINX_POD_TWO_NAME -- /bin/bash
    • $ curl example.com

如果您完成了上述步驟,您可以將nginx Pods自己的軟件。


附加說明和資源:

我鼓勵您檢查kubeadm ,因為它是創建您自己的 Kubernetes 集群的工具:

如你所說:

我是這個 Kubernetes 東西的初學者,所以我真的不知道該怎么做以及 go 的方式......請幫助我或給我一些提示。

您可以查看以下鏈接以獲取更多資源:

您可以遵循多種選擇:

由於您有兩個 POD,您可以通過服務公開一個,

  1. 所以 service-1 被暴露並向 POD-1 發送流量
  2. POD-1 將向 Kubernetes 的 service-2 發送請求
  3. 這樣流量將被轉發到 POD-2 並從那里將 Go 出集群

如果您可以在單個 POD 中運行這兩個應用程序,那么還有一種容器到容器通信的可能性。

POD-1 到 POD-2 的通信可以使用服務選項或 POD URI。

暫無
暫無

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

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