kubernetes集群部署好以后,我們是無(wú)法直接在集群外部訪問(wèn)集群內(nèi)的網(wǎng)絡(luò)環(huán)境。當(dāng)我們把SpringCloud的微服務(wù)遷移到k8s 中后,雖然不需要做什么改動(dòng),微服務(wù)實(shí)例就可以注冊(cè)到Eureka注冊(cè)中心實(shí)現(xiàn)和原生SpringCloud一樣的訪問(wèn)效果。
但是當(dāng)我們本地電腦啟動(dòng)某個(gè)微服務(wù)模塊,需要注冊(cè)到k8s中的eureka中進(jìn)行調(diào)試,或者本地電腦需要連接集群內(nèi)部的mysql、redis、zk等中間件的時(shí)候,此時(shí)就無(wú)法和原來(lái)一樣直接連接了。
集群外訪問(wèn)集群內(nèi)服務(wù),kubernetes提供了NodePort和ingress兩種方式,但是ingress只提供7層轉(zhuǎn)發(fā),NodePort維護(hù)起來(lái)就比較麻煩了。
網(wǎng)上也提供了幾種實(shí)現(xiàn)kubernetes內(nèi)網(wǎng)和本地局域網(wǎng)互通的方法,由于我公司本地網(wǎng)絡(luò)比較簡(jiǎn)單,所以直接采用靜態(tài)路由+dns解析的方式,實(shí)現(xiàn)本地電腦直接訪問(wèn)kubernetes集群內(nèi)部服務(wù)。下面介紹下實(shí)現(xiàn)方法:
網(wǎng)絡(luò)環(huán)境:
本地PC和服務(wù)器網(wǎng)段:192.168.1.0/24
k8s集群pod網(wǎng)段:10.42.0.0/16
k8s集群svc網(wǎng)段:10.43.0.0/16
本地dns服務(wù)器:192.168.1.222
集群node節(jié)點(diǎn)一:192.168.1.224
由于集群node節(jié)點(diǎn)默認(rèn)會(huì)有路由訪問(wèn)集群內(nèi)部如下圖,所以我們只需要把本地的請(qǐng)求,路由到任意node節(jié)點(diǎn)ip即可。

我直接在公司網(wǎng)關(guān)設(shè)備添加兩條靜態(tài)路由,保證所有的設(shè)備生效,避免每個(gè)開(kāi)發(fā)都去維護(hù)靜態(tài)路由。

添加好靜態(tài)路由以后,本地ping測(cè)試,已經(jīng)可以訪問(wèn)集群內(nèi)網(wǎng)絡(luò)。

10.43.0.0/16這個(gè)svc網(wǎng)段,由于是虛擬ip,所以無(wú)法ping通,添加此條路由,主要是為了dns解析。
雖然現(xiàn)在可以在本地電腦訪問(wèn)kubernetes集群內(nèi)部的ip了,但是svc地址無(wú)法解析。此時(shí)我們就需要借助kubernetes集群的內(nèi)部dns解析內(nèi)部的svc地址。
查看kubernetes集群內(nèi)部coreDNS ClusterIP地址
kubectl get svc -n kube-system | grep dns kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 337d
接下來(lái)部署一個(gè)輕量級(jí)的DNS服務(wù)DNSmasq
安裝
yum -y install dnsmasq
修改/etc/dnsmasq.conf配置:
resolv-file=/etc/resolv.dnsmasq.conf #指定上游dns服務(wù)器 strict-order #嚴(yán)格按照resolv-file文件中的順序進(jìn)行從上到下解析,直到成功為止 server=/cluster.local/10.43.0.10 #指定以cluster.local為后綴的域名,使用coredns的地址解析,這里可以不配直接把coredns配置在/etc/resolv.dnsmasq.conf 里面。 listen-address=192.168.1.222 #指定本地IP地址 addn-hosts=/etc/dnsmasq.hosts #自定義dns記錄文件 conf-dir=/etc/dnsmasq.d #所有的解析記錄都會(huì)存在此目錄下
配置上游dns服務(wù)器
cat /etc/resolv.dnsmasq.conf nameserver 61.139.2.69 nameserver 202.98.96.68 nameserver 192.168.2.1
設(shè)置自建DNS解析
cat /etc/dnsmasq.hosts 192.168.1.224 zuul.amd5.cn 192.168.1.224 eureka.amd5.cn
設(shè)置開(kāi)機(jī)啟動(dòng)并啟動(dòng)服務(wù)
systemctl enable dnsmasq && systemctl start dnsmasq
然后把本地電腦DNS改成192.168.1.222
本地ping測(cè)試,集群eureka svc地址測(cè)試

本地啟動(dòng)一個(gè)springcloud 微服務(wù),查看kubernetes集群eureka注冊(cè)中心已經(jīng)注冊(cè)成功。

訪問(wèn)此服務(wù)接口測(cè)試



