Назад | Перейти на главную страницу

Kubernetes + Rancher: несколько VLAN

Я собираюсь развернуть кластер k8s + Rancher в своей локальной сети, но в моей среде есть несколько виртуальных локальных сетей, при этом pfsense действует как межсетевой экран и маршрутизатор между такими виртуальными локальными сетями.

Мой кластер находится в XCP-NG в качестве гипервизора, и я проинформирую VLAN, что он должен передать его узлам кластера.

Я намерен иметь некоторые службы в разных VLAN, потому что у меня есть VLAN для разработки, DMZ, производства, управления и т. Д., И я хотел бы знать, нужно ли мне использовать другой подход во время развертывания K8s + Rancher из-за моя среда?

Чтобы развернуть кластер, который работает с модулями в нескольких VLAN, должны ли узлы кластера иметь несколько сетевых адаптеров, каждый из которых находится в VLAN, которую я собираюсь использовать?

Например, если в моем кластере 6 узлов, 3 главных и 3 рабочих, должны ли они находиться в одной VLAN или в разных VLAN, и связи между ними достаточно?

Если я хочу развернуть модуль в VLAN разработки, а мой кластер находится в VLAN управления, возможно ли это?

Заранее спасибо за вашу помощь.

Если я хочу развернуть модуль в VLAN разработки, а мой кластер находится в VLAN управления, возможно ли это?

Это невозможно, кластеры Kubernetes имеют собственную внутреннюю сеть. Эта сеть полностью отделена от вашей локальной сети.

При развертывании кластера кубернетов (неважно, является ли он владельцем ранчо или любым другим локальным кластером кубернетов) вы можете определить, на каком CIDR будет находиться ваш кластер.

Вы можете подумать: если у Kubernetes есть собственная сеть, как я могу общаться с приложениями, которые я развернул в своем кластере?

Вы можете раскрыть свои ресурсы с помощью службы или Ingress. Например: когда вы создаете услугу с type: LoadBalancer ваша служба выделит внешний или общедоступный IP-адрес (конечную точку), к которому можно получить доступ из вашей внутренней сети.

$ kubectl get svc
NAME                                      TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)                      AGE
custom-nginx-svc                          LoadBalancer   10.0.10.18   104.155.87.232   80:31549/TCP                 11d
echo-svc                                  LoadBalancer   10.0.10.14   23.251.138.185   80:30668/TCP                 11d
kubernetes                                ClusterIP      10.0.0.1     <none>           443/TCP                      11d
nginx-ing-nginx-ingress-controller        NodePort       10.0.9.184   <none>           80:31745/TCP,443:31748/TCP   25h
nginx-ing-nginx-ingress-default-backend   ClusterIP      10.0.1.169   <none>           80/TCP                       25h

Как видно из приведенного выше примера, существуют две службы с определенным внешним IP-адресом.

В вашем сценарии вам нужно, чтобы эти внешние IP-адреса были IP-адресами из вашей локальной сети. Этого можно добиться с помощью MetalLB.

В MetalLB вы можете определить, какие IP-адреса из вашей локальной сети будут использоваться. Например, следующая конфигурация дает MetalLB контроль над IP-адресами от 192.168.1.240 к 192.168.1.250:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.1.240-192.168.1.250

Это привязывает MetalLB только к одному диапазону, а это не то, что вам нужно. Итак, пожалуйста, взгляните на этот статья, где объясняется, как вы можете создавать IPPools и использовать их.