You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置防火墙NAT规则以通过公网IP外部访问Proxmox内K8s集群中Ingress托管的应用

如何配置防火墙NAT规则以通过公网IP外部访问Proxmox内K8s集群中Ingress托管的应用

嘿,我来帮你捋清楚这个配置!你之前用NodePort逐个配置NAT的方式虽然可行,但用上Ingress之后,咱们可以更高效地搞定外部访问——只需要针对Ingress Controller的NodePort配置一两条NAT规则,就能让所有通过Ingress托管的应用都能被外部访问到啦~

第一步:确认Ingress Controller的NodePort

首先你得明确Ingress Controller对外暴露的NodePort端口,从你提供的测试命令来看,你用的是30747这个端口(就是你curl时指定的172.16.104.107:30747)。如果你的Ingress Controller同时支持HTTPS,还会有一个对应的HTTPS NodePort(比如常见的30443),你可以通过kubectl get svc -n ingress-nginx(假设Ingress Controller部署在ingress-nginx命名空间)查看完整的端口信息。

第二步:配置Proxmox的NAT规则

接下来咱们把Proxmox公网网卡(你这里是vmbr0)的80/443端口(这是HTTP/HTTPS的默认端口,外部用户访问更友好)转发到K8s节点的Ingress Controller NodePort上,具体规则如下:

1. 配置HTTP(80端口)的NAT规则

把下面的规则添加到Proxmox的网络配置文件(通常是/etc/network/interfaces)里的vmbr0配置段中:

post-up iptables -t nat -A PREROUTING  -i vmbr0 -p tcp --dport 80 -j DNAT --to 172.16.104.107:30747
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 172.16.104.107:30747

2. (可选)配置HTTPS(443端口)的NAT规则

如果你的Ingress用到了HTTPS,对应添加以下规则(替换30443为你实际的HTTPS NodePort):

post-up iptables -t nat -A PREROUTING  -i vmbr0 -p tcp --dport 443 -j DNAT --to 172.16.104.107:30443
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 172.16.104.107:30443

第三步:验证配置

配置完成后,重启Proxmox的网络服务(systemctl restart networking)让规则生效。之后外部用户就可以通过你的公网IP访问了:

  • 如果你的域名已经解析到这个公网IP,直接访问http://nginx.example.com就能打开测试的Nginx应用
  • 没有域名的话,可以在本地hosts文件里把nginx.example.com映射到你的公网IP,或者用curl指定Host头测试:
curl --header "HOST: nginx.example.com" http://你的公网IP

额外小贴士

  • 如果你有多个K8s节点,建议把Ingress Controller部署成DaemonSet,这样每个节点都会运行Ingress Controller实例,你可以把NAT规则转发到多个节点的IP,提升可用性
  • 为了防止Proxmox重启后iptables规则丢失,你可以执行iptables-save > /etc/iptables/rules.v4把规则保存下来,或者确保上面的post-up/post-down规则已经正确写入网络配置文件

备注:内容来源于stack exchange,提问作者estem estem

火山引擎 最新活动