欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nginx?ingress?controller高可用的實現(xiàn)

 更新時間:2024年06月06日 09:44:27   作者:不知名運維:  
本文主要介紹了Nginx?ingress?controller高可用的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前提準備

既然要實現(xiàn)ingress controller的高可用必須是多實例部署ingress,這里我們可以使用Daemonset+nodeseletor的模式進行部署多實例,這樣就可以將ingress部署多個實例且能根據(jù)標簽選擇固定node(IP);

1.修改Ingress-Controller 運行模式為hostNetwork并生效

apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.3.0
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  minReadySeconds: 0
  revisionHistoryLimit: 10
...
    spec:
      #共享宿主機的網(wǎng)絡協(xié)議棧(不給ingress controller分配獨立的網(wǎng)路命名空間,與宿主機網(wǎng)絡命名空間共享)
      hostNetwork: True
      containers:
      - args:
        - /nginx-ingress-controller
        - --election-id=ingress-controller-leader
        - --controller-class=k8s.io/ingress-nginx
        - --ingress-class=nginx
        - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
        - --validating-webhook=:8443
        - --validating-webhook-certificate=/usr/local/certificates/cert
        - --validating-webhook-key=/usr/local/certificates/key
        ...
        volumeMounts:
        - mountPath: /usr/local/certificates/
          name: webhook-cert
          readOnly: true
      dnsPolicy: ClusterFirst
      #添加節(jié)點調(diào)度器
      nodeSelector:
        #節(jié)點上含有的標簽
        ingress: "yes"
      serviceAccountName: ingress-nginx
      terminationGracePeriodSeconds: 300
      volumes:
      - name: webhook-cert
        secret:
          secretName: ingress-nginx-admission

在這里插入圖片描述

在這里插入圖片描述

2.給部署ingress-controller的節(jié)點打標簽

[root@k8s-master ~]# kubectl label nodes/k8s-node1 ingress=yes
[root@k8s-master ~]# kubectl label nodes/k8s-node2 ingress=yes

在這里插入圖片描述

3.查看ingress-controller的部署情況

[root@k8s-master ~]# kubectl get pod -n ingress-nginx -o wide 
NAME                                   READY   STATUS      RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
ingress-nginx-admission-create-7gnc4   0/1     Completed   0          59d   10.244.107.200   k8s-node3   <none>           <none>
ingress-nginx-admission-patch-ldmt4    0/1     Completed   0          59d   10.244.107.199   k8s-node3   <none>           <none>
ingress-nginx-controller-qcfj8         1/1     Running     1          14d   192.168.1.3      k8s-node2   <none>           <none>
ingress-nginx-controller-zf5vd         1/1     Running     2          14d   192.168.1.2      k8s-node1   <none>           <none>

方式一:LVS+Keepalived+Nginx+Ingress

在這里插入圖片描述

serverIP
lvs01-master(keepalived)192.168.1.5
lvs02-slave(keepalived)192.168.1.6
nginx01192.168.1.7
nginx02192.168.1.8
ingress-ngx-controller01192.168.1.2
ingress-ngx-controller02192.168.1.3

工作流程:
1、當客戶端請求web2.study.com我們的服務時,DNS會解析出這個域名對應的IP為47.9x.5x.xx;
2、然后根據(jù)路由器上的nat將47.9x.5x.xx的請求都轉(zhuǎn)發(fā)至VIP讓LVS進行處理;
3、lvs(四層)再根據(jù)負載策略(這里是rr)將請求轉(zhuǎn)發(fā)至后端服務器(nginx01,02)
4、nginx(七層)接收到請求后 根據(jù)相應的域名(這里可以設置泛域名) 轉(zhuǎn)發(fā)至ingress處理;
ps:這里加nginx主要進行七層負載,根據(jù)客戶端請求的域名來進行處理,代理ingress的同時,也可以當作正常的nginx(添加相應的vhost就行)處理業(yè)務;

一、部署ipvsadm和keepalived

lvs01和lvs02節(jié)點都部署

[root@localhost ~]# yum install ipvsadm keepalived

二、配置keepalived

1.配置lvs01(keepalived master)

[root@lvs01-master ~]# vim /etc/keepalived/keepalived.conf
global_defs {
# 這里將郵件設置的相關信息都注釋掉了
# router_id是keepalived的一個標識,最好不同的keepalived配置成不一樣
   router_id LVS_DEVEL_MASTER
}

vrrp_instance VI_1 {
    # MASTER表示是主節(jié)點,備份節(jié)點是BACKUP
    state MASTER
    # 工作接口用于選舉,這里寫網(wǎng)卡名稱,這個不同的服務器,可能有所不同
    interface ens33
    # vrrp虛擬路由標識,如果是一組虛擬路由內(nèi)的MASTER和BACKUP節(jié)點的該值要保持一致,如果是多組就定義多個,范圍0-255
    virtual_router_id 51
    # 優(yōu)先級,MASTER節(jié)點的值必須大于BACKUP的值
    priority 100
    # MASTER與BACKUP同步的時間間隔,單位為秒
    advert_int 1
    # lvs對應的真實IP
    mcast_src_ip=192.168.1.5
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虛擬IP的地址
    virtual_ipaddress {
        192.168.1.188
    }
}

#定義lvs集群服務 這里就相當于設置lvs路由 也可以說是防火墻規(guī)則,當有請求來請求虛擬地址時轉(zhuǎn)發(fā)至下面配置的真實服務器
virtual_server 192.168.1.188 80 {
    # 健康檢查的時間,單位為秒
    delay_loop 6
    # 負載調(diào)度算法,這里設置為rr,即輪詢算法
    lb_algo rr
    # 設置DR模式,返回請求時,不走LVS,直接返回到客戶端。
    lb_kind DR
    # 虛擬地址的子網(wǎng)掩碼
    nat_mask 255.255.255.0
    # 會話保持時間(對動態(tài)網(wǎng)頁非常有用),單位為秒
    persistence_timeout 50
    #指定轉(zhuǎn)發(fā)協(xié)議類型,有TCP和UDP兩種
    protocol TCP

    # 配置后端真實服務器信息(這里指ngx)
    # 當然如果只是lvs+keepalived+ingress高可用的話,在這里就可以直接寫ingress的信息
    real_server 192.168.1.7 80 {
        # 節(jié)點的權(quán)重,數(shù)字越大權(quán)重越高,被轉(zhuǎn)發(fā)至此服務器的請求也就相應的多
        weight 1
        #realserver的狀態(tài)監(jiān)測設置 單位秒
        TCP_CHECK {
            # 連接超時時間
            connect_timeout 3
            # 重試次數(shù)
            nb_get_retry 3
            # 重試間隔
            delay_before_retry 3
        }
    }

    real_server 192.168.1.8 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 192.168.1.188 443 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP

    real_server 192.168.1.7 443 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.1.8 443 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

2.配置lvs02(keepalived backup)

[root@lvs02-slave ~]# vim /etc/keepalived/keepalived.conf
global_defs {
# 這里將郵件設置的相關信息都注釋掉了
# router_id是keepalived的一個標識,最好不同的keepalived配置成不一樣
   router_id LVS_DEVEL_BACKUP
}

vrrp_instance VI_1 {
    # MASTER表示是主節(jié)點,備份節(jié)點是BACKUP
    state BACKUP
    # 工作接口用于選舉,這里寫網(wǎng)卡名稱,這個不同的服務器,可能有所不同
    interface ens33
    # vrrp虛擬路由標識,如果是一組虛擬路由內(nèi)的MASTER和BACKUP節(jié)點的該值要保持一致,如果是多組就定義多個,范圍0-255
    virtual_router_id 51
    # 優(yōu)先級,MASTER節(jié)點的值必須大于BACKUP的值
    priority 99
    # MASTER與BACKUP同步的時間間隔,單位為秒
    advert_int 1
    # lvs對應的真實IP
    mcast_src_ip=192.168.1.6
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虛擬IP的址
    virtual_ipaddress {
        192.168.1.188
    }
}

#定義lvs集群服務 這里就相當于設置lvs路由 也可以說是防火墻規(guī)則,當有請求來請求虛擬地址時轉(zhuǎn)發(fā)至下面配置的真實服務器
virtual_server 192.168.1.188 80 {
    # 健康檢查的時間,單位為秒
    delay_loop 6
    # 負載調(diào)度算法,這里設置為rr,即輪詢算法
    lb_algo rr
    # 設置DR模式,返回請求時,不走LVS,直接返回到客戶端。
    lb_kind DR
    # 虛擬地址的子網(wǎng)掩碼
    nat_mask 255.255.255.0
    # 會話保持時間(對動態(tài)網(wǎng)頁非常有用),單位為秒
    persistence_timeout 50
    #指定轉(zhuǎn)發(fā)協(xié)議類型,有TCP和UDP兩種
    protocol TCP

    # 配置后端真實服務器信息(這里指ngx)
    # 當然如果只是lvs+keepalived+ingress高可用的話,在這里就可以直接寫ingress的信息
    real_server 192.168.1.7 80 {
        # 節(jié)點的權(quán)重,數(shù)字越大權(quán)重越高,被轉(zhuǎn)發(fā)至此服務器的請求也就相應的多
        weight 1
        #realserver的狀態(tài)監(jiān)測設置 單位秒
        TCP_CHECK {
            # 連接超時時間
            connect_timeout 3
            # 重試次數(shù)
            nb_get_retry 3
            # 重試間隔
            delay_before_retry 3
        }
    }

    real_server 192.168.1.8 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 192.168.1.188 443 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP

    real_server 192.168.1.7 443 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.1.8 443 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

三、啟動兩臺keepalived

分別啟動兩臺keepalived并加入開機自啟后查看此時的網(wǎng)絡變化以及ipvs

[root@lvs01-master ~]# systemctl start keepalived 
[root@lvs01-master ~]# systemctl enable keepalived 

如下狀態(tài) keepalived已經(jīng)正常運行了,可以看到簡短日志指的是健康檢查未檢測到后端真是服務器節(jié)點然后在ipvs中刪除了就不會路由請求了

在這里插入圖片描述

在keepalived master節(jié)點查看網(wǎng)卡是否生成了虛擬VIP

[root@lvs01-master ~]# ip a 

在這里插入圖片描述

再查看路由轉(zhuǎn)發(fā)情況(此時的lvs01 02節(jié)點都會有此路由轉(zhuǎn)發(fā)的規(guī)則)

[root@lvs01-master ~]# ipvsadm -Ln

在這里插入圖片描述

如上我們可以看到有兩條TCP規(guī)則,分別代表的是keepalived里的"virtual_server"的配置,但是現(xiàn)在他們下面沒有真實的服務器 是因為我們后端真實的服務器ngx還沒啟動~

四、安裝ngx并配置代理ingress啟動

ngx01 nginx02 同操作

1.yum安裝并配置ngx

[root@ngx01 ~]# yum -y install nginx nginx-all-modules
[root@ngx01 ~]# vim /etc/nginx/nginx.conf
#這里將默認的server塊配置的端口監(jiān)聽改為除80以外的端口,因為80端口會用來代理ingress配合keepalived做檢測
...
    server {
        listen       90;
        listen       [::]:90;
        server_name  _;
        root         /usr/share/nginx/html;
...
    }

2.ngx反向代理ingress

upstream ingress-server-http{
  server 192.168.1.3:80 max_fails=2 fail_timeout=30s;
  server 192.168.1.2:80 max_fails=2 fail_timeout=30s;
}

upstream ingress-server-https{
  server 192.168.1.3:443 max_fails=2 fail_timeout=30s;
  server 192.168.1.2:443 max_fails=2 fail_timeout=30s;
}


server {                                    # 設定虛擬主機配置
        listen  80;                             # 監(jiān)聽的端口
        server_name  web2.study.com;            # 監(jiān)聽的地址,多個域名用空格隔開
        location / {                            # 默認請求 ,后面 "/" 表示開啟反向代理,也可以是正則表達式
           #proxy_set_header X-Real-IP $remote_addr;
           #proxy_set_header X-Real-Port $remote_port;
           #proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
           #root     html;                       # 監(jiān)聽地址的默認網(wǎng)站根目錄位置
           proxy_set_header Host $http_host;    # 重寫請求頭中的host字段
           #proxy_set_header X-Forward-For $remote_addr;
                                                # 配置XFF,記錄HTTP的請求端真實的IP

           proxy_pass   http://ingress-server-http;   # 代理轉(zhuǎn)發(fā)
           #index  index.html index.htm;         # 歡迎頁面
           #proxy_set_header Host $host;
           #proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           #proxy_set_header X-Forwarded-Proto $scheme;   
        }
        add_header backendCode $upstream_status;
        add_header BackendIP "$upstream_addr;" always;
}

server {                                    # 設定虛擬主機配置
        #listen  80;                             # 監(jiān)聽的端口
        listen 443 ssl;
        server_name  web2.study.com;            # 監(jiān)聽的地址,多個域名用空格隔開

        ssl_certificate /etc/nginx/conf.d/cert/web2.study.com.crt;
        ssl_certificate_key /etc/nginx/conf.d/cert/web2.study.com.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;


        location / {                            # 默認請求 ,后面 "/" 表示開啟反向代理,也可以是正則表達式
           proxy_pass   https://ingress-server-https;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;

        }
        add_header backendCode $upstream_status;
        add_header BackendIP "$upstream_addr;" always;
}

3.啟動ngx

[root@ngx01 ~]# nginx
[root@ngx01 ~]# ps -ef |grep nginx 
root      65865      1  0 22:48 ?        00:00:00 nginx: master process nginx
nginx     65866  65865  0 22:48 ?        00:00:00 nginx: worker process
root      65868  65838  0 22:48 pts/1    00:00:00 grep --color=auto nginx

在這里插入圖片描述

4.關閉后端服務器ngx的arp查詢功能并設置回環(huán)IP

[root@ngx01 ~]# vim /etc/nginx/conf.d/lvs-rs.sh
vip=192.168.1.188
mask='255.255.255.255'
dev=lo:0

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -w net.ipv4.ip_forward=1
ifconfig $dev $vip broadcast $vip netmask $mask up
route add -host $vip dev $dev

[root@ngx01 conf.d]# chmod +755 lvs-rs.sh 
[root@ngx01 conf.d]# bash lvs-rs.sh 

5.再次查看keepalived狀態(tài)和lvs路由轉(zhuǎn)發(fā)規(guī)則

后端服務器ngx啟動并配置后查看keepalived日志,發(fā)現(xiàn)監(jiān)聽到了后端服務器并將路由加入了轉(zhuǎn)發(fā)規(guī)則內(nèi)

[root@lvs01-master ~]# journalctl -f -u keepalived

在這里插入圖片描述

[root@lvs01-master ~]# ipvsadm

在這里插入圖片描述

五、驗證

1.驗證此架構(gòu)是否可以正常處理請求

k8s創(chuàng)建一個pod應用,并暴露ingress 模擬用戶訪問,此時需要將ingress的域名解析綁定為 虛擬VIP

在這里插入圖片描述

瀏覽器模擬用戶訪問

在這里插入圖片描述

在這里插入圖片描述

如上 實現(xiàn)了nginx反向代理ingress的輪詢流程

2.驗證后端真實服務器ngx是否高可用

接下來驗證每次請求都會負載到哪臺后端真實服務器nginx來轉(zhuǎn)發(fā)到ingress的呢,這就需要在ingress-controller上進行配置了

修改ingress的日志輸出格式,并查看ingress的訪問日志

[root@k8s-master ~]# vim /etc/kubernetes/manifests/ingress-controller.yaml 
apiVersion: v1
data:
  log-format-upstream: '{"time": "$time_iso8601", "remote_addr": "$proxy_protocol_addr", "x_forwarded_for": "$proxy_add_x_forwarded_for", "request_id": "$req_id","remote_user": "$remote_user", "bytes_sent": $bytes_sent, "request_time": $request_time, "status": $status, "vhost": "$host", "request_proto": "$server_protocol","path": "$uri", "request_query": "$args", "request_length": $request_length, "duration": $request_time,"method": "$request
_method", "http_referrer": "$http_referer","http_user_agent": "$http_user_agent" }'
kind: ConfigMap
...

在這里插入圖片描述

[root@k8s-master ~]# kubectl apply -f /etc/kubernetes/manifests/ingress-controller.yaml

在這里插入圖片描述

如上圖可以發(fā)現(xiàn)現(xiàn)在我們的請求都是經(jīng)過nginx01 IP為1.7這臺機器轉(zhuǎn)發(fā)過來的

現(xiàn)關閉1.7這臺ngx01模擬故障,客戶端接著請求看是否會把請求轉(zhuǎn)發(fā)至另一臺1.8nginx02上

[root@ngx01 conf.d]# killall nginx 

在這里插入圖片描述

當ngx01宕機后,我們也可以通過keepalived的日志看到ngx01會被健康檢測剔除
此時lvs的路由規(guī)則如下

在這里插入圖片描述

3.驗證lvs+keepalived是否高可用

當 keepalived master節(jié)點和backup節(jié)點同時在線且運行正常時,虛擬VIP會在keepalived master上, 如下:

lvs01-master節(jié)點:

在這里插入圖片描述

lvs02-backup節(jié)點:

在這里插入圖片描述

此時將lvs01 master節(jié)點的 keeaplived服務停止模擬宕機故障,看虛擬Vip是否會漂移到lvs02 backup節(jié)點上

[root@lvs01-master ~]# systemctl stop keepalived

再次查看lvs02 backup節(jié)點

在這里插入圖片描述

可以看到虛擬vip已經(jīng)漂移過來了,并可以正常的提供服務,可以通過keepalived的日志來查看漂移過程;

ps:附加一個https的訪問

在這里插入圖片描述

方式二:Nginx+Keepalived+Ingress

在這里插入圖片描述

serverIP
ngx01-master(keepalived)192.168.1.5
ngx02-slave(keepalived)192.168.1.6
ingress-ngx-controller01192.168.1.2
ingress-ngx-controller02192.168.1.3

這種方式是直接用nginx做負載均衡,同時兼顧反向代理的角色,直接通過七層代理協(xié)議來通過域名來分發(fā)請求,當并發(fā)少時可以使用這種方式

ps:每日PV1000萬以下或并發(fā)請求1萬以下都可以考慮用Nginx;構(gòu)建大型網(wǎng)站或者提供重要服務且機器較多時,可多加考慮利用LVS。

一、部署keepalived及nginx

兩臺同操作

[root@localhost ~]# yum -y install nginx keepalived nginx-all-modules

二、配置nginx

1.修改ngx主配置文件

兩臺同操作

[root@localhost ~]# vim /etc/nginx/nginx.conf
#這里將默認的server塊配置的端口監(jiān)聽改為除80以外的端口,因為80端口會用來代理ingress配合keepalived做檢測
...
    server {
        listen       90;
        listen       [::]:90;
        server_name  _;
        root         /usr/share/nginx/html;
...
    }

2.ngx反向代理ingress并啟動

兩臺ngx同操作

[root@localhost ~]# vim /etc/nginx/conf.d/proxy-ingress.conf
upstream ingress-server-http{
  server 192.168.1.3:80 max_fails=2 fail_timeout=30s;
  server 192.168.1.2:80 max_fails=2 fail_timeout=30s;
}

upstream ingress-server-https{
  server 192.168.1.3:443 max_fails=2 fail_timeout=30s;
  server 192.168.1.2:443 max_fails=2 fail_timeout=30s;
}

server {                                    # 設定虛擬主機配置
        listen  80;                             # 監(jiān)聽的端口
        server_name  *.study.com;            # 監(jiān)聽的地址,多個域名用空格隔開
        location / {                            # 默認請求 ,后面 "/" 表示開啟反向代理,也可以是正則表達式
           proxy_set_header Host $http_host;    # 重寫請求頭中的host字段
           proxy_pass   http://ingress-server-http;   # 代理轉(zhuǎn)發(fā)
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        add_header backendCode $upstream_status;
        add_header BackendIP "$upstream_addr;" always;
}


server {                                    # 設定虛擬主機配置
        #listen  80;                             # 監(jiān)聽的端口
        listen 443 ssl;
        server_name  *.study.com;            # 監(jiān)聽的地址,多個域名用空格隔開

        ssl_certificate /etc/nginx/conf.d/cert/web2.study.com.crt;
        ssl_certificate_key /etc/nginx/conf.d/cert/web2.study.com.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;


        location / {                            # 默認請求 ,后面 "/" 表示開啟反向代理,也可以是正則表達式
           proxy_pass   https://ingress-server-https;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;

        }
        add_header backendCode $upstream_status;
        add_header BackendIP "$upstream_addr;" always;
}

三、配置keepalived

1. 配置ngx01-master

[root@localhost ~]# vim /etc/keepalived/keepalived.conf
global_defs {
   router_id NGINX_MASTER
}

vrrp_script check_nginx {
  script "/etc/keepalived/check_nginx.sh"
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33 #修改為實際網(wǎng)卡名
    virtual_router_id 51 #每個虛擬路由器惟一標識,范圍:0-255,同一組虛擬路由器的vrid必須一致
    priority 100 #優(yōu)先級,備服務設置90
    advert_int 1 #指定VRRP心跳包通告間隔時間,默認為1秒
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #虛擬IP
    virtual_ipaddress {
        192.168.1.99/24
    }
    track_script {
        check_nginx
    }
}

2. 配置ngx02-slave

global_defs {
   router_id NNGINX_BACKUP
}

vrrp_script check_nginx {
  script "/etc/keepalived/check_nginx.sh"
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51 #每個虛擬路由器惟一標識,范圍:0-255,同一組虛擬路由器的vrid必須一致
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.99/24
    }
    track_script {
        check_nginx
    }
}

3.配置檢查nginx運行狀態(tài)的腳本

兩臺同操作

check_nginx.sh 檢測nginx腳本如下

[root@localhost ~]# vim /etc/keepalived/check_nginx.sh
nginx_status_http=$(ss -unptl |grep 80 |egrep -cv "grep|$$")
nginx_status_https=$(ss -unptl |grep 443 |egrep -cv "grep|$$")

if [ $nginx_status_http -ne 0 ] && [ $nginx_status_https -ne 0 ];then
  exit 0
  #echo "檢測通過"
else
  exit 1
  #echo "檢測不通過"
fi

然后啟動keepalived

systemctl start keepalived

四、驗證

驗證步驟跟第一種方式類似,keepalived起來之后看下虛擬vip,然后模擬kill掉其中一臺的nginx服務看 IP是否會漂移到另一臺上;

不同的是:
第一種方式兩臺lvs服務器掛掉一臺VIP會漂移至另一臺;

這種方式是兩臺服務器中的nginx服務掛掉一個VIP就會漂移至另一臺;

方式三:LVS+Keepalived+Ingress

在這里插入圖片描述

serverIP
lvs01-master(keepalived)192.168.1.5
lvs02-slave(keepalived)192.168.1.6
ingress-ngx-controller01192.168.1.2
ingress-ngx-controller02192.168.1.3

這種方式和第一種方式步驟相同,只不過不用添加ngx這一步了,
只需要 將keepalived配置的真實服務器(real_server)換成ingress controller的pod所在節(jié)點IP地址 和 關閉ingress controller的pod所在節(jié)點的arp查詢功能并設置回環(huán)IP即可

一、部署ipvsadm和keepalived

lvs01和lvs02節(jié)點都部署

[root@localhost ~]# yum install ipvsadm keepalived

二、配置keepalived

1.配置lvs01(keepalived master)

[root@lvs01-master ~]# vim /etc/keepalived/keepalived.conf
global_defs {
# 這里將郵件設置的相關信息都注釋掉了
# router_id是keepalived的一個標識,最好不同的keepalived配置成不一樣
   router_id LVS_DEVEL_MASTER
}

vrrp_instance VI_1 {
    # MASTER表示是主節(jié)點,備份節(jié)點是BACKUP
    state MASTER
    # 工作接口用于選舉,這里寫網(wǎng)卡名稱,這個不同的服務器,可能有所不同
    interface ens33
    # vrrp虛擬路由標識,如果是一組虛擬路由內(nèi)的MASTER和BACKUP節(jié)點的該值要保持一致,如果是多組就定義多個,范圍0-255
    virtual_router_id 51
    # 優(yōu)先級,MASTER節(jié)點的值必須大于BACKUP的值
    priority 100
    # MASTER與BACKUP同步的時間間隔,單位為秒
    advert_int 1
    # lvs對應的真實IP
    mcast_src_ip=192.168.1.5
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虛擬IP的地址
    virtual_ipaddress {
        192.168.1.188
    }
}

#定義lvs集群服務 這里就相當于設置lvs路由 也可以說是防火墻規(guī)則,當有請求來請求虛擬地址時轉(zhuǎn)發(fā)至下面配置的真實服務器
virtual_server 192.168.1.188 80 {
    # 健康檢查的時間,單位為秒
    delay_loop 6
    # 負載調(diào)度算法,這里設置為rr,即輪詢算法
    lb_algo rr
    # 設置DR模式,返回請求時,不走LVS,直接返回到客戶端。
    lb_kind DR
    # 虛擬地址的子網(wǎng)掩碼
    nat_mask 255.255.255.0
    # 會話保持時間(對動態(tài)網(wǎng)頁非常有用),單位為秒
    persistence_timeout 50
    #指定轉(zhuǎn)發(fā)協(xié)議類型,有TCP和UDP兩種
    protocol TCP

    # 配置后端真實服務器信息(這里指ngx)
    # 當然如果只是lvs+keepalived+ingress高可用的話,在這里就可以直接寫ingress的信息
    real_server 192.168.1.2 80 {
        # 節(jié)點的權(quán)重,數(shù)字越大權(quán)重越高,被轉(zhuǎn)發(fā)至此服務器的請求也就相應的多
        weight 1
        #realserver的狀態(tài)監(jiān)測設置 單位秒
        TCP_CHECK {
            # 連接超時時間
            connect_timeout 3
            # 重試次數(shù)
            nb_get_retry 3
            # 重試間隔
            delay_before_retry 3
        }
    }

    real_server 192.168.1.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 192.168.1.188 443 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP

    real_server 192.168.1.2 443 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.1.3 443 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

2.配置lvs02(keepalived backup)

[root@lvs02-slave ~]# vim /etc/keepalived/keepalived.conf
global_defs {
# 這里將郵件設置的相關信息都注釋掉了
# router_id是keepalived的一個標識,最好不同的keepalived配置成不一樣
   router_id LVS_DEVEL_BACKUP
}

vrrp_instance VI_1 {
    # MASTER表示是主節(jié)點,備份節(jié)點是BACKUP
    state BACKUP
    # 工作接口用于選舉,這里寫網(wǎng)卡名稱,這個不同的服務器,可能有所不同
    interface ens33
    # vrrp虛擬路由標識,如果是一組虛擬路由內(nèi)的MASTER和BACKUP節(jié)點的該值要保持一致,如果是多組就定義多個,范圍0-255
    virtual_router_id 51
    # 優(yōu)先級,MASTER節(jié)點的值必須大于BACKUP的值
    priority 99
    # MASTER與BACKUP同步的時間間隔,單位為秒
    advert_int 1
    # lvs對應的真實IP
    mcast_src_ip=192.168.1.6
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虛擬IP的址
    virtual_ipaddress {
        192.168.1.188
    }
}

#定義lvs集群服務 這里就相當于設置lvs路由 也可以說是防火墻規(guī)則,當有請求來請求虛擬地址時轉(zhuǎn)發(fā)至下面配置的真實服務器
virtual_server 192.168.1.188 80 {
    # 健康檢查的時間,單位為秒
    delay_loop 6
    # 負載調(diào)度算法,這里設置為rr,即輪詢算法
    lb_algo rr
    # 設置DR模式,返回請求時,不走LVS,直接返回到客戶端。
    lb_kind DR
    # 虛擬地址的子網(wǎng)掩碼
    nat_mask 255.255.255.0
    # 會話保持時間(對動態(tài)網(wǎng)頁非常有用),單位為秒
    persistence_timeout 50
    #指定轉(zhuǎn)發(fā)協(xié)議類型,有TCP和UDP兩種
    protocol TCP

    # 配置后端真實服務器信息(這里指ngx)
    # 當然如果只是lvs+keepalived+ingress高可用的話,在這里就可以直接寫ingress的信息
    real_server 192.168.1.2 80 {
        # 節(jié)點的權(quán)重,數(shù)字越大權(quán)重越高,被轉(zhuǎn)發(fā)至此服務器的請求也就相應的多
        weight 1
        #realserver的狀態(tài)監(jiān)測設置 單位秒
        TCP_CHECK {
            # 連接超時時間
            connect_timeout 3
            # 重試次數(shù)
            nb_get_retry 3
            # 重試間隔
            delay_before_retry 3
        }
    }

    real_server 192.168.1.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 192.168.1.188 443 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP

    real_server 192.168.1.2 443 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.1.3 443 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

三、關閉ingress所在節(jié)點的arp查詢功能并設置回環(huán)IP

ingress pod所在節(jié)點都要執(zhí)行

[root@k8s-node2 ~]# vim /home/fands/lvs-rs.sh
vip=192.168.1.188
mask='255.255.255.255'
dev=lo:0

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -w net.ipv4.ip_forward=1
ifconfig $dev $vip broadcast $vip netmask $mask up
route add -host $vip dev $dev

[root@ngx01 conf.d]# chmod +755 lvs-rs.sh 
[root@ngx01 conf.d]# bash lvs-rs.sh 

四、驗證

這個方式驗證方法跟方式一相同,不管是其中哪一個ingress pod 掛掉都不影響正常使用,其中l(wèi)vs掛掉之后虛擬IP都會進行漂移至另一臺lvs上不影響業(yè)務使用;可自行驗證

總結(jié)

本文所有高可用的方式都是將域名解析至keepalived的VIP

遇到的問題如下:當使用ingress配置了https時,再使用nginx反向代理ingress的443端口的話,此時訪問域名會發(fā)現(xiàn)訪問地址被強制轉(zhuǎn)了https,此時在ingress處并沒有添加強制轉(zhuǎn)https的配置,甚至還想能通過http訪問;

這樣的話需要在ingress配置 將強制https關閉;

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"

到此這篇關于Nginx ingress controller高可用的實現(xiàn)的文章就介紹到這了,更多相關Nginx ingress controller高可用 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Nginx顯示500錯誤的原因以及解決方法

    Nginx顯示500錯誤的原因以及解決方法

    nginx出現(xiàn)500錯誤,不會顯示具體錯誤信息,要到日志文件里面去看,下面這篇文章主要給大家介紹了關于Nginx顯示500錯誤的原因以及解決方法的相關資料,需要的朋友可以參考下
    2022-12-12
  • Nginx服務器搭建和基本配置詳解

    Nginx服務器搭建和基本配置詳解

    這篇文章主要介紹了Nginx服務器搭建和基本配置詳解,Nginx是事件驅(qū)動的高性能服務器,需要的朋友可以參考下
    2015-09-09
  • Nginx啟動、重啟失敗的一般解決方法和步驟

    Nginx啟動、重啟失敗的一般解決方法和步驟

    這篇文章主要介紹了Nginx啟動、重啟失敗的一般解決方法和步驟,本文沒啥技術(shù)含量,只是一個慣用手法的總結(jié),需要的朋友可以參考下
    2015-07-07
  • Nginx實現(xiàn)UDP四層轉(zhuǎn)發(fā)的過程

    Nginx實現(xiàn)UDP四層轉(zhuǎn)發(fā)的過程

    為了解決VPN連接速度慢的問題,可以通過Nginx實現(xiàn)UDP的四層轉(zhuǎn)發(fā),首先檢查Nginx是否安裝了with-stream模塊,然后修改nginx.conf配置文件進行UDP端口的轉(zhuǎn)發(fā)設置,使用nginx-t檢查配置文件語法,無誤后重新加載Nginx,這樣通過國內(nèi)服務器中轉(zhuǎn),可以提升連接到國外服務器的速率
    2024-09-09
  • Nginx通過nginx-rtmp-module模塊搭建流媒體服務器實現(xiàn)直播

    Nginx通過nginx-rtmp-module模塊搭建流媒體服務器實現(xiàn)直播

    近日有客戶咨詢想用Nginx搭建流媒體服務器實現(xiàn)直播,方便他們打造自己的平臺,經(jīng)過各種測試發(fā)現(xiàn)如下文章不錯,特分享給需要的朋友
    2023-10-10
  • Nginx反向代理springboot的jar包過程解析

    Nginx反向代理springboot的jar包過程解析

    這篇文章主要介紹了Nginx反向代理springboot的jar包過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • nginx配置指令之server_name的具體使用

    nginx配置指令之server_name的具體使用

    本文主要介紹了nginx配置指令之server_name的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • 基于Nginx的Mencached緩存配置詳解

    基于Nginx的Mencached緩存配置詳解

    這篇文章主要介紹了基于Nginx的Mencached緩存配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • 詳解nginx服務器綁定域名和設置根目錄的方法

    詳解nginx服務器綁定域名和設置根目錄的方法

    這篇文章主要介紹了詳解nginx服務器綁定域名和設置根目錄的方法,nginx服務器綁定域名以及設置根目錄非常方便,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Nginx出現(xiàn)The plain HTTP request was sent to HTTPS port問題解決方法

    Nginx出現(xiàn)The plain HTTP request was sent to HTTPS port問題解決方法

    這篇文章主要介紹了Nginx出現(xiàn)The plain HTTP request was sent to HTTPS port問題解決方法,需要的朋友可以參考下
    2015-04-04

最新評論