Translate

Показ дописів із міткою metallb. Показати всі дописи
Показ дописів із міткою metallb. Показати всі дописи

середа, 9 березня 2022 р.

Kubernetes. Part V: Configure And Use Ingress. MetalLB

Ця стаття вже п'ята з серії статей про Kubernetes. Перед її прочитанням рекомендую ознайомитись хоча б з базовими об'єктами кластеру та їх використанням для вирішення задач.

Сервіси Kubernetes надають можливість створення постійних точок входу до контейнерів додатків, що працюють в подах, проте IP адреси сервісів обираються з діапазону оверлейної мережі, і тому є видимими лише в межах кластеру. Тож у разі необхідності доступу до таких додатків ззовні існують наступні варіанти:

hostNetwork: true. Под, створений із такою опцією, матиме можливість бачити мережеві інтерфейси Kubernetes хосту, де його було запущено.

apiVersion: v1
kind: Pod
metadata:
  name: influxdb
spec:
  hostNetwork: true
  containers:
  - name: influxdb
    image: influxdb

Порт такого додатку буде прослуховуватись на всіх інтерфейсах вузла. Використання цієї опції не рекомендовано, адже в цьому випадку вичерпується простір портів хост-машини, що зі зростанням кількості працюючих додатків може з легкістю призвести до конфліктів. Більш того, у разі перестворення поду, він може "переселитись" на інший вузол, що додасть складності в його пошуках. Виключенням можуть слугувати поди утиліт, котрим дійсно необхідний вищезгаданий доступ задля управлінням мережею і т.п.

Задеплоїмо вищезгаданий поді та знайдемо на якому вузлі він оселився:

$ kubectl get pod -o wide
NAME      READY   STATUS    RESTARTS   AGE   IP            NODE   
influxdb   1/1     Running   0          38h   10.30.0.141   k8s-s-a


$ kubectl get nodes -o wide
NAME      STATUS   ROLES   AGE     VERSION   INTERNAL-IP
...
k8s-s-a   Ready    <none>  4d16h   v1.23.4   192.168.1.48


І перевіримо чи порт справді відкритий:

$ ssh 192.168.1.48
$ netstat -tulpn | grep influx
tcp        0      0 127.0.0.1:4222   0.0.0.0:*   LISTEN      949214/influxd
tcp6       0      0 :::8086          :::*        LISTEN      949214/influxd


hostPort: integer. Ця опція дозволяє поду активувати лише один порт на всіх інтерфейсах вузла Kubernetes. Yaml для створення такого поду буде виглядати наступним чином:

apiVersion: v1
kind: Pod
metadata:
  name: influxdb
spec:
  containers:
    - name: influxdb
      image: influxdb
      ports:
        - containerPort: 8086
          hostPort: 8086

Його, як і попередній варіант, дуже не рекомендовано використовувати по тим же причинам.