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

Как разрешить маршрутизацию на IP-адреса Kubernetes, доступные только через правила iptables?

Я настроил рабочий кластер Kubernetes с помощью Rancher, который определяет две сети:

Я хочу использовать свой существующий обратный прокси Caddy для доступа к этим конечным точкам службы, поэтому я определил маршрут (10.10.10.172 это один из моих узлов Kubernetes):

sudo route add -net 10.43.0.0 netmask 255.255.0.0 gw 10.10.10.172

Моя таблица маршрутизации на веб-сервере Caddy:

arturh@web:~$ sudo route
[sudo] password for arturh:
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         DD-WRT.local    0.0.0.0         UG    0      0        0 eth0
10.10.10.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.43.0.0       rancherkube1.lo 255.255.0.0     UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0

Используя эту настройку, я могу получить доступ и использовать 10.43.0.1:443 без проблем (это основная конечная точка kubernetes api):

arturh@web:~$ nmap 10.43.0.1 -p 443 | grep 443
443/tcp open  https
arturh@web:~$ curl -k https://10.43.0.1
Unauthorized

Но доступ к любому другому IP-адресу в сети 10.43.0.0/16 не удается, и я не могу понять, почему:

arturh@web:~$ kubectl get svc | grep prometheus-server
prometheus-prometheus-server               10.43.115.122   <none>         80/TCP              1d
arturh@web:~$ curl 10.43.115.122
curl: (7) Failed to connect to 10.43.115.122 port 80: No route to host
arturh@web:~$ traceroute 10.43.115.122
traceroute to 10.43.115.122 (10.43.115.122), 30 hops max, 60 byte packets
 1  rancherkube1.local (10.10.10.172)  0.348 ms  0.341 ms  0.332 ms
 2  rancherkube1.local (10.10.10.172)  3060.710 ms !H  3060.722 ms !H  3060.716 ms !H

Я могу получить доступ ко всему из самого узла kubernetes:

[rancher@rancherkube1 ~]$ wget -qO- 10.43.115.122
<!DOCTYPE html>
<html lang="en">...

который работает из-за правил iptable NAT:

[rancher@rancherkube1 ~]$ sudo iptables -t nat -L -n  | grep 10.43
KUBE-SVC-NGLRF5PTGH2R7LSO  tcp  --  0.0.0.0/0            10.43.115.122        /* default/prometheus-prometheus-server:http cluster IP */ tcp dpt:80
KUBE-SVC-NPX46M4PTMTKRN6Y  tcp  --  0.0.0.0/0            10.43.0.1            /* default/kubernetes:https cluster IP */ tcp dpt:443

Я запутался, потому что записи для 10.43.0.1 который работает, выглядит идентично другим, которые не работают ... Я полагаю, мне нужно добавить правило iptables, чтобы разрешить доступ к 10.43.0.0/16 подсеть, но я не знаком с iptables.

Я новичок во всем бизнесе Kubernetes, это правильный способ доступа к конечным точкам ваших сервисов? Если да, может ли кто-нибудь помочь мне с правильной командой iptables?

вы можете получить доступ к вещам с хоста, на котором выполняется рабочая нагрузка kubernetes, потому что у него есть правила iptables и возможные правила таблицы маршрутов для маршрутизации трафика.

Если вы хотите получить доступ к сервисам Kubernetes извне вашего кластера, вы хотите использовать входной контроллер с входящей службой.

https://kubernetes.io/docs/concepts/services-networking/ingress/