在K8S当中进行服务的公网HTTP/HTTPS暴露

基于iptables实现80/443端口转发 在K8S集群当中,Ingress的Service默认会在30000-32767端口进行随机分配,但是如果我们想要以HTTP/HTTPS服务的标准端口80/443端口进行启动的话,就需要我们进行额外的端口转发,我们需要将443端口的流量路由到Ingress

基于iptables实现80/443端口转发

在K8S集群当中,Ingress的Service默认会在30000-32767端口进行随机分配,但是如果我们想要以HTTP/HTTPS服务的标准端口80/443端口进行启动的话,就需要我们进行额外的端口转发,我们需要将443端口的流量路由到Ingress的Service的端口号上。

我们使用如下的命令,基于iptables规则去实现将443端口的流量转发到30777端口上。

sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 30777

我们可以通过如下的命令去查看我们配置的端口转发是否生效:

sudo iptables -t nat -L -n --line-numbers

但是iptables的变化只针对机器的本次启动生效,如果机器发生重启,那么规则就会丢失,此时我们就涉及到iptables的持久化,我们可以安装 iptables-persistent工具实现iptables的持久化。

sudo apt install iptables-persistent

使用如下的命令,对当前的规则进行持久化:

sudo netfilter-persistent save

执行上述命令的结果:

run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save

其实就是让它执行/usr/share/netfilter-persistent/plugins.d/15-ip4tables save脚本,将IPV4规则保存到/etc/iptables/rules.v4,IPV6规则保存到/etc/iptables/rules.v6,系统重启时netfilter-persistent会自动加载规则表。

本质上netfilter-persistent就是Linux系统的一个服务,基于Linux的服务去实现的启动时可以自动加载。

sudo systemctl status netfilter-persistent

我们也可以使用cat去查看iptables的配置信息快照,会得到类似如下的结果:

root@master:~# cat /etc/iptables/rules.v4
# Generated by iptables-save v1.8.7 on Wed Dec 25 00:21:18 2024
*raw
:PREROUTING ACCEPT [226385254:128793284327]
:OUTPUT ACCEPT [146914493:112190727697]
:cali-OUTPUT - [0:0]
:cali-PREROUTING - [0:0]
:cali-from-host-endpoint - [0:0]
:cali-rpf-skip - [0:0]
:cali-to-host-endpoint - [0:0]
-A PREROUTING -m comment --comment "cali:6gwbT8clXdHdC1b1" -j cali-PREROUTING
-A PREROUTING -d 169.254.25.10/32 -p udp -m udp --dport 53 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK
-A PREROUTING -d 169.254.25.10/32 -p tcp -m tcp --dport 53 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK
Comment