K8S多節點情況下使用nginx負載ingress或者是istio域名服務的處理
背景
- 公司內部有一個自建的K8S測試集群.同事這邊使用istio或者是ingress發布了一個域名服務.
- 公司這邊的DNS管理比較嚴格,比較難以添加DNS記錄,所以處理起來需要手動處理.
- 為了進行性能壓測,希望域名能夠平均的負載到K8S的3個worker節點中.
- 並且能夠盡可能的減少客戶端hosts文件的修改.
處理方式
- 最簡單的處理是在nginx所在服務器,將istio后者是ingress 對應的worker節點添加到hosts中
vi /etc/hosts
添加 ip 虛擬域名
- 但是做了一個實現,發現/etc/hosts 並不能很好的實現 域名IP地址的輪詢.
- 感覺還是需要用bind 添加一個域名關系來處理.
- 為了簡單先用 hosts .至少 hsots 能夠實現一定意義的高可用
原理說明
- 備注: 此處是根據自己的理解
ingress 在使用時 本質是利用 nginx的 virtual hosts的路由分發機制.
根據http 過來的是 server_name 進行區分.
如果是 serverA 那么走A服務, 如果是serverB 那么走B服務
其實就跟VPS實現同一個ip地址可以掛載多個域名是完全一樣的技術路線.
nginx的處理
- 注意安裝的時候需要 添加 with-stream 的方式來處理
- 對不修改 hosts 文件
vi /etc/hosts
添加
10.24.19.204 b2b.xxxx.com
10.24.19.205 b2b.xxxx.com
10.24.19.207 b2b.xxxx.com
nginx的模板為
worker_processes auto;
events {
multi_accept on;
use epoll;
worker_connections 1024;
}
stream {
upstream node_ingress {
least_conn;
server b2b.xxxx.com:8080 ;
}
server {
listen 0.0.0.0:80;
proxy_pass node_ingress;
proxy_timeout 10m;
proxy_connect_timeout 1s;
}
}
修改客戶端機器的hosts
- 注意這里不能與k8s節點一致
c:\windows\system32\drivers\etc\hosts
添加內容
10.24.19.208 b2b.xxxx.com
- 瀏覽器打開即可
備注說明
- 注意理論上可以使用在正向代理來實現
- 注意可以使用bind9 搭建一個自建的dns實現路由的負載均衡.
- 注意nginx其實需要注意的地方挺多的. 需要逐步學習