受新冠肺炎疫情影响,现在很多小伙伴都在家中远程办公;我们公司也不例外,这几天陆续给需要的同事们都开通了公司的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! 🙂