Ця стаття вже п'ята з серії статей про Kubernetes. Перед її прочитанням рекомендую ознайомитись хоча б з базовими об'єктами кластеру та їх використанням для вирішення задач.
Сервіси Kubernetes надають можливість створення постійних точок входу до контейнерів додатків, що працюють в подах, проте IP адреси сервісів обираються з діапазону оверлейної мережі, і тому є видимими лише в межах кластеру. Тож у разі необхідності доступу до таких додатків ззовні існують наступні варіанти:
• hostNetwork: true. Под, створений із такою опцією, матиме можливість бачити мережеві інтерфейси Kubernetes хосту, де його було запущено.
Порт такого додатку буде прослуховуватись на всіх інтерфейсах вузла. Використання цієї опції не рекомендовано, адже в цьому випадку вичерпується простір портів хост-машини, що зі зростанням кількості працюючих додатків може з легкістю призвести до конфліктів. Більш того, у разі перестворення поду, він може "переселитись" на інший вузол, що додасть складності в його пошуках. Виключенням можуть слугувати поди утиліт, котрим дійсно необхідний вищезгаданий доступ задля управлінням мережею і т.п.
influxdb 1/1 Running 0 38h 10.30.0.141 k8s-s-a
• hostPort: integer. Ця опція дозволяє поду активувати лише один порт на всіх інтерфейсах вузла Kubernetes. Yaml для створення такого поду буде виглядати наступним чином:
Його, як і попередній варіант, дуже не рекомендовано використовувати по тим же причинам.
Сервіси 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
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
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
Його, як і попередній варіант, дуже не рекомендовано використовувати по тим же причинам.