受新冠肺炎疫情影响,现在很多小伙伴都在家中远程办公;我们公司也不例外,这几天陆续给需要的同事们都开通了公司的VPN,以便大家远程办公。
前几天在测试环境挤出了些资源,使用Ansible工具给新项目搭建了K8S环境;今天,开发的同事想要从公司的网段能直接访问到K8S内部的虚拟网络。查找了下,在群集中的一个节点上使用 NAT 即可实现此功能。
现环境如下:
办公区网段 10.10.0.0/24,测试服务器网段 172.16.220.0/24;
K8S群集网段 172.20.0.0/16,K8S SVC 网段10.68.0.0/16。
在群集的任一节点上操作均可,这里就选在141上进行操作:
开启内核转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
设置SNAT:
iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -d 172.20.0.0/16 -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -d 10.68.0.0/16 -j MASQUERADE
三层交换上设置路由条目:
sys ip route 10.68.0.0 255.255.0.0 172.16.220.141 ip route 172.20.0.0 255.255.0.0 172.16.220.141
至此网络已经打通,在办公区电脑上测试:
但是在 k8s 中,由于 pod ip 随时都可能在变化,service ip 也不是能轻松获取到的。我们希望内网 DNS 在解析 *.cluster.local
,去coreDNS
寻找解析结果。
于是在此台机上又搭建了Bind-DNS服务,我是源码部署的,具体过程就不再贴出,之前文章有,主要是配置*.cluster.local
域名的解析:
vim /usr/local/bind9/etc/named.conf
// named.conf options { listen-on port 53 { 172.16.220.141; }; directory "/var/named"; max-cache-size 128M; allow-query { any; }; recursion yes; dnssec-enable no; #需关闭dnssec,否则解析报错: 无有效签名 version "Microsoft Windows 2008 DNS Server. (-_-)"; forward first; forwarders { 223.5.5.5; #解析本地未有域名时将转发到这些DNS地址 114.114.114.114; }; }; key "rndc-key" { algorithm hmac-sha256; secret "aI56kwUga+lVobWbqqiDItHDIsnlEBgS1egW+jTYv8w="; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; zone "." IN { type hint; file "named.ca"; }; include "/usr/local/bind9/etc/named.rfc1912.zones";
vim /usr/local/bind9/etc/named.rfc1912.zones
// named.rfc1912.zones zone "localhost" IN { type master; file "localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "cluster.local" IN { type forward;
forward only; forwarders { 10.68.0.2; }; };
rndc reload
DNS解析转发配置完成。
在办公区电脑查看:
Great content! Super high-quality! Keep it up! 🙂