使用 Nginx 配置 TCP 負(fù)載均衡
假設(shè)Kubernetes集群已經(jīng)配置好,我們將基于CentOS為Nginx創(chuàng)建一個(gè)虛擬機(jī)。
Nginx (CenOS8 Minimal) - 192.168.1.50 Kube Master - 192.168.1.40 Kube Worker 1 - 192.168.1.41 Kube Worker 2 - 192.168.1.42
步驟1:安裝epel倉(cāng)庫(kù)
因?yàn)閚ginx軟件包在CentOS系統(tǒng)默認(rèn)倉(cāng)庫(kù)里面沒(méi)有,所以需要安裝epel倉(cāng)庫(kù):
[root@nginxlb?~]#?dnf?install?epel-release?-y
步驟2:安裝Nginx
運(yùn)行以下命令安裝nginx:
[root@nginxlb?~]#?dnf?install?nginx?-y
使用rpm命令驗(yàn)證Nginx包的詳細(xì)信息:
[root@nginxlb?~]#?rpm?-qi?nginx

配置防火墻,允許訪(fǎng)問(wèn)nginx的http和https服務(wù):
[root@nginxlb?~]#?firewall-cmd?--permanent?--add-service=http
[root@nginxlb?~]#?firewall-cmd?--permanent?--add-service=https
[root@nginxlb?~]#?firewall-cmd?–reload
使用以下命令將SELinux設(shè)置為permissive模式,并重啟系統(tǒng)使selinux關(guān)閉生效:
[root@nginxlb?~]#?sed?-i?s/^SELINUX=.*$/SELINUX=permissive/?/etc/selinux/config
[root@nginxlb?~]#?reboot
步驟3:從Kubernetes中獲取應(yīng)用程序的NodePort詳細(xì)信息
[kadmin@k8s-master?~]$??kubectl?get?all?-n?ingress-nginx<以上代碼可復(fù)制粘貼,可往左滑>
從上面的輸出中可以看到,每個(gè)工作節(jié)點(diǎn)的NodePort 32760映射到端口80,NodePort 32375映射到443端口。我們將在Nginx配置文件中使用這些節(jié)點(diǎn)端口來(lái)做負(fù)載均衡。
步驟4:將Nginx配置負(fù)載均衡
編輯nginx配置文件,并添加以下內(nèi)容:
[root@nginxlb?~]#?vim?/etc/nginx/nginx.conf
注釋掉“server”部分(從38到57行):

并添加以下幾行:
upstream?backend?{
???server?192.168.1.41:32760;?
???server?192.168.1.42:32760;
}
server?{
???listen?80;
???location?/?{
???????proxy_read_timeout?1800;
???????proxy_connect_timeout?1800;
???????proxy_send_timeout?1800;
???????send_timeout?1800;
???????proxy_set_header????????Accept-Encoding???"";
???????proxy_set_header????????X-Forwarded-By????$server_addr:$server_port;
???????proxy_set_header????????X-Forwarded-For???$remote_addr;
???????proxy_set_header????????X-Forwarded-Proto?$scheme;
???????proxy_set_header?Host?$host;
???????proxy_set_header?X-Real-IP?$remote_addr;
???????proxy_pass?http://backend;
???}
????location?/nginx_status?{
????????stub_status;
????}
}
<以上代碼可復(fù)制粘貼,可往左滑>

保存配置文件,并退出。

根據(jù)上述更改,所有向nginx的80端口的請(qǐng)求,都將被路由到的Kubernetes工作節(jié)點(diǎn)(192.168.1.41和192.168.1.42)的NodePort(32760)端口上。
使用以下命令啟用Nginx服務(wù):
[root@nginxlb?~]#?systemctl?start?nginx
[root@nginxlb?~]#?systemctl?enable?nginx
·測(cè)試Nginx的 TCP負(fù)載均衡器
要測(cè)試nginx作為Kubernetes的TCP負(fù)載均衡是否工作正常,請(qǐng)部署基于nginx的deployment,將deployment的端口暴露為80端口,并為nginx 的deployment定義入口資源。我已經(jīng)使用以下命令來(lái)部署這些Kubernetes對(duì)象:
[kadmin@k8s-master?~]$?kubectl?create?deployment?nginx-deployment?--image=nginx
deployment.apps/nginx-deployment?created
[kadmin@k8s-master?~]$?kubectl?expose?deployments?nginx-deployment??--name=nginx-deployment?--type=NodePort?--port=80
service/nginx-deployment?exposed
運(yùn)行以下命令以獲取deployments,svc和ingress詳細(xì)信息:

更新本地主機(jī)的hosts文件,以便nginx-lb.example.com指向nginx服務(wù)器的IP地址(192.168.1.50)
[root@localhost?~]#?echo?"192.168.1.50??nginx-lb.example.com"?>>?/etc/hosts
嘗試通過(guò)瀏覽器訪(fǎng)問(wèn)nginx-lb.example.com

總? ? 結(jié)
上面證實(shí)了Nginx作為T(mén)CP負(fù)載均衡器可以正常工作,因?yàn)樗梢载?fù)載平衡K8s工作節(jié)點(diǎn)之間端口80上的TCP通信量。
推薦閱讀:
5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機(jī),樹(shù)莓派,等等。在公眾號(hào)內(nèi)回復(fù)「1024」,即可免費(fèi)獲?。?!


