keepalived-vipKubernetes 使用 keepalived 來(lái)產(chǎn)生虛擬 IP address + 我們將探討如何利用 IPVS - The Linux Virtual Server Project' 來(lái) kubernetes 配置 VIP + 前言kubernetes v1.6 版提供了三種方式去暴露 Service: +
有了這些方式, 為何我們還需要 keepalived ? + ___________________ | | |-----| Host IP: 10.4.0.3 | | |___________________| | | ___________________ | | |Public ----(example.com = 10.4.0.3/4/5)----|-----| Host IP: 10.4.0.4 | | |___________________| | | ___________________ | | | |-----| Host IP: 10.4.0.5 | |___________________| 我們假設(shè) Ingress 運(yùn)行在 3 個(gè) kubernetes 節(jié)點(diǎn)上, 并對(duì)外暴露 + DNS Round Robin (RR) 將對(duì)應(yīng)到 + 嚴(yán)格來(lái)說(shuō), 這并沒(méi)有真正的做到 High Availability (HA) + 這邊 IPVS 可以幫助我們解決這件事, 這個(gè)想法是虛擬 IP(VIP) 對(duì)應(yīng)到每個(gè) service 上, 并將 VIP 暴露到 kubernetes 群集之外 + 與 service-loadbalancer 或 ingress-nginx 的區(qū)別我們看到以下的圖 +
我們可以看到只有一個(gè) node 被選為 Master(透過(guò) VRRP 選擇的), 而我們的 VIP 是 + 環(huán)境需求只需要確認(rèn)要運(yùn)行 keepalived-vip 的 kubernetes 群集 DaemonSets 功能是正常的就行了 + RBAC由于 kubernetes 在 1.6 后引進(jìn)了 RBAC 的概念, 所以我們要先去設(shè)定 rule, 至於有關(guān) RBAC 的詳情請(qǐng)至 說(shuō)明。 + vip-rbac.yaml + apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRolemetadata: name: kube-keepalived-viprules:- apiGroups: [''] resources: - pods - nodes - endpoints - services - configmaps verbs: ['get', 'list', 'watch']---apiVersion: v1kind: ServiceAccountmetadata: name: kube-keepalived-vip namespace: default---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata: name: kube-keepalived-viproleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kube-keepalived-vipsubjects:- kind: ServiceAccount name: kube-keepalived-vip namespace: default clusterrolebinding.yaml +
$ kubectl create -f vip-rbac.yaml$ kubectl create -f clusterrolebinding.yaml 示例先建立一個(gè)簡(jiǎn)單的 service + nginx-deployment.yaml +
主要功能就是 pod 去監(jiān)聽(tīng)聽(tīng) 80 port, 再開(kāi)啟 service NodePort 監(jiān)聽(tīng) 30320 + $ kubecrl create -f nginx-deployment.yaml 接下來(lái)我們要做的是 config map +
注意, 這邊的 + 接著確認(rèn)一下 + $kubectl get configmapNAME DATA AGEvip-configmap 1 23h 再來(lái)就是設(shè)置 keepalived-vip +
建立 daemonset + $ kubectl get daemonset kube-keepalived-vipNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE-SELECTOR AGEkube-keepalived-vip 5 5 5 5 5 檢查一下配置狀態(tài) +
可以隨機(jī)挑一個(gè) pod, 去看里面的配置 + $ kubectl exec kube-keepalived-vip-c4sxw cat /etc/keepalived/keepalived.confglobal_defs { vrrp_version 3 vrrp_iptables KUBE-KEEPALIVED-VIP}vrrp_instance vips { state BACKUP interface eno1 virtual_router_id 50 priority 103 nopreempt advert_int 1 track_interface { eno1 } virtual_ipaddress { 10.87.2.50 }}# Service: default/nginxvirtual_server 10.87.2.50 80 { // 此為 service 開(kāi)的口 delay_loop 5 lvs_sched wlc lvs_method NAT persistence_timeout 1800 protocol TCP real_server 10.2.49.30 8080 { // 這里說(shuō)明 pod 的真實(shí)狀況 weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 } }} 最后我們?nèi)y(cè)試這功能 +
10.87.2.50:80(我們假設(shè)的 VIP, 實(shí)際上其實(shí)沒(méi)有 node 是用這 IP) 即可幫我們導(dǎo)向這個(gè) service + 以上的程式代碼都在 github 上可以找到。 + 參考文檔 |
|
來(lái)自: 早點(diǎn)悟道 > 《工作》