Kubernetes: маршрутизировать входящий трафик на конкретный Pod - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу развернуть множество модулей в Google Kubernetes Engine, а затем установить TCP-соединение с каждым конкретным модулем по поддомену, например pod-name-or-label.mydomain.com или путем маршрутизации, например, по протоколу: //mydomain.com: 7878 /pod-name-or-label.

Я смотрел в разных направлениях, как Istio или nginx-ingress, но мне это кажется слишком сложным.

Нет ли простого решения для этого?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Теперь у меня есть это решение с istio установленным в кластере:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: echo-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "dev.sample.com"

С этим шлюзом я могу применить это развертывание, обслуживание, VirtualService

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-echo-1000-deployment
  labels:
    echoservice: echo-1000
spec:
  replicas: 1
  selector:
    matchLabels:
      echoservice: echo-1000
  template:
    metadata:
      labels:
        echoservice: echo-1000
    spec:
      containers:
      - image: gcr.io/google-containers/echoserver:1.10
        imagePullPolicy: IfNotPresent
        name: my-echo-run-container
        ports:
        - containerPort: 8080
          protocol: TCP

---

apiVersion: v1
kind: Service
metadata:
  name: my-echo-1000-service
  labels:
    echoservice: echo-1000
spec:
  ports:
  - port: 8080
    name: http
  selector:
    echoservice: echo-1000

---

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-echo-1000-vservice
spec:
  hosts:
  - "dev.sample.com"
  gateways:
  - echo-gateway
  http:
  - match:
    - uri:
        exact: /echo-1000
    route:
    - destination:
        host: my-echo-1000-service
        port:
          number: 8080

Получите LoadbalancerIP от istio-ingressgateway и сделайте запись в / etc / hosts для dev.sample.com

Теперь я могу получить эхосервер в конкретном Pod с http://dev.sample.com/echo-1000

Это хорошее решение или есть лучшее?

0 голосов
/ 10 ноября 2018

Для Istio . Вы можете использовать VirtualService для управления правилами маршрутизации до цели подмножество с определением DestinationRules .

DestinationRule будет направлять к цели Стручки с помощью указанной метки стручков.

Поток запросов будет:

+--------------------+
|                    |
|    Istio Gateway   |
|                    |
|                    |
+---------+----------+
          |traffic incoming
          |
+---------v----------+
|                    |
|   VirtualService   |
|                    |
|                    |
+---------+----------+
          |route to subset by the routing rules
          v

+--------------------+
|                    |
|  DestinationRules  |
|                    |
|                    |
+---------+----------+
          |route traffic to target pods
          v

+--------------------+
|                    |
|                    |
|       Pods         |
|                    |
+--------------------+

так, как @ericstaples сказал, что вы должны создавать различные развертывания с разными метками pod для достижения разделения трафика на целевых pod , Пример: * +1032 *

  1. создать развертывание с меткой pod: t1
  2. создать подмножество в DestinationRule : выбрать модуль метки t1 в качестве подмножества s1
  3. контролируйте свой трафик в VirtualService , который направляет на s1 подмножество
  4. s1 маршрут к целевым контейнерам

также для выставления Шлюз , вы можете использовать ClusterIP или NodePort , как ** Kubernetes ** другие услуги сделали, см. Больше Istio Traffic .

Есть некоторые ссылки, может быть, это полезно:

https://istio.io/docs/concepts/traffic-management/

https://istio.io/docs/tasks/traffic-management/request-routing/

...