6.使用Calico打通Svc網路
現狀
一般情況下,Kuberntes叢集暴露服務的方式有Ingress、NodePort、HostNetwork,這幾種方式用在生產環境下是沒有問題的,安全性和穩定性有保障。但是在內部開發環境下,使用起來就有諸多不便,開發希望可以直接訪問自己的服務,但是Pod IP又是隨機變化的,這個時候我們就可以使用SVC IP 或者SVC Name進行訪問
目標
打通SVC網路,使開發本地可以透過SVC IP 或 SVC Name訪問叢集服務
官方文件:https://docs.projectcalico.org/archive/v3.8/networking/service-advertisement
注意:前提是已經用BGP打通了Pod網路或已經建立了BGP對等,否則需要先進行BPG對等之後才可以繼續進行
前提
需要核心交換/路由器支援BGP動態路由
[M1]確定SVC網路資訊
kubectl cluster-info dump|grep -i "service-cluster-ip-range"
以下為輸出
"--service-cluster-ip-range=172.16.0.0/16",
"--service-cluster-ip-range=172.16.0.0/16",
"--service-cluster-ip-range=172.16.0.0/16",
[M1]啟用SVC網路廣播
kubectl patch ds -n kube-system calico-node --patch \
'{"spec": {"template": {"spec": {"containers": [{"name": "calico-node", "env": [{"name": "CALICO_ADVERTISE_CLUSTER_IPS", "value": "172.16.0.0/16"}]}]}}}}'
以下為輸出
daemonset.extensions/calico-node patched
測試,正常情況下啟用BGP廣播後,3分鐘核心心交換即可接收到路由資訊
找到叢集DNS服務進行測試
kubectl get svc kube-dns -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 172.16.0.10 <none> 53/UDP,53/TCP,9153/TCP 3d21h
找一個Pod IP在叢集外進行解析測試,如果可以解析到結果說明SVC網路已經打通
dig -x 172.15.190.2 @172.16.0.10
輸出
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -x 172.15.190.2 @172.16.0.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23212
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;2.190.15.172.in-addr.arpa. IN PTR
;; ANSWER SECTION:
2.190.15.172.in-addr.arpa. 30 IN PTR 172-15-190-2.ingress-nginx.ingress-nginx.svc.cluster.local. # 可以正常解析到主機記錄
;; Query time: 3 msec
;; SERVER: 172.16.0.10#53(172.16.0.10)
;; WHEN: Fri Jul 09 15:26:55 CST 2021
;; MSG SIZE rcvd: 150