如何允许路由到Kubernetes IP地址只能通过iptables规则访问?

我使用Rancherbuild立了一个工作的Kubernetes集群,它定义了两个networking:

  • 10.42.0.0/16地址为10.42.0.0/16
  • 10.43.0.0./16用于服务端点

我想使用现有的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 web服务器上的路由表:

 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 

但访问10.43.0.0/16networking中的任何其他IP地址失败,我不明白为什么:

 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规则和可能的路由表规则来路由stream量。

如果您想要从集群外部访问kubernetes服务,那么您希望使用具有入口服务的入口控制器。

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