您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關F5與Openshift集成怎么實現灰度發布,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
什么是灰度發布
灰度發布是指在黑與白之間,能夠平滑過渡的一種發布方式。ABtest就是一種灰度發布方式,讓一部分用戶繼續用A,一部分用戶開始用B,如果用戶對B沒有什么反對意見,那么逐步擴大范圍,把所有用戶都遷移到B上面來。灰度發布可以保證整體系統的穩定,在初始灰度的時候就可以發現、調整問題,以保證其影響度。
灰度發布的價值
使用灰度發布可以在產品正式上線前針對特定一些目標用戶進行開放,獲得這些目標用戶的反饋,及早發現問題,修復問題,完善產品的不足。如果發現新的版本價值不大,能夠及早更換思路,避免產品直接上線后產生不好的影響。
Openshift Route自帶的灰度發布功能
Openshift Route自帶的灰度發布,是通過Route下“掛載”兩個或兩個以上Service,并調整各個Service的權值進行控制流量的分布。
例如應用有兩個服務,分別為service-v1和service-v2,其中service-v2為新版本。通過不斷放大service-v2的權值,觀察用戶的反饋,及時發現service-v2中的問題,并完善修復,最終service-v2承載所有service-v1的流量,實現服務的升級。通過這種方式,可以大大地降低service-v2中的問題對客戶產生的影響。
Openshift Route對Service分流使用非常方便,一些普通的業務完全可以使用這個特性達到測試的目的。但是它的簡單也帶來了一些不足,就是它只能對請求進行概率地劃分流量,并不能定向到用戶。
例如,以下需求Openshift Route目前還無法實現。產品新版本正式發布前,我們希望對產品進行一些測試,只允許指定的一批用戶或者一些網段的ip下的用戶才能訪問新版本。
流量到達F5時,F5會優先對請求進行iRule下的匹配檢查,定向到對應的Pool
如果iRule下未匹配,則會控制vs下綁定的Polices規則進行匹配
在上篇中,我們知道Openshift上的F5控制器會自動在F5上生成Polices規則,來滿足Openshift Route的功能。那么只需要將它與自定義的iRule結合就能夠實現既滿足服務的分流,又能控制用戶對服務的定向訪問。
準備工作(詳細見上篇:Openshift-F5集成(南北流量走F5))
創建新的HostSub
Local Traffic -> Virtual Servers
Name
:VS名字
Destination Address/Mask
:VS的IP地址
Service Port
:HTTP
HTTP Profile
:http
Source Address Translation
:Auto Map
HTTPS
Name
:VS名字
Destination Address/Mask
:VS的IP地址
Service Port
:HTTPS
HTTP Profile
:http
SSL Profile (Client)
:/Common/clientssl
Source Address Translation
:Auto Map
設置VS中的cccl-whitelist為1
對應每臺F5設備創建一個Deployment
Deployment中的 --bigip-url 為設備的IP
Deployment中的 --bigip-partition為之前F5下創建的Partition,Openshift
Deployment中的--route-http-vserver為手動創建的HTTP VS
Deployment中的--route-https-vserver為手動創建的HTTPS VS
Deployment中的--route-label為給Controller打的標簽(對于一組F5不需要配置,多組F5通過它打Label,并在Route中設置label f5type:label來指定使用的F5)
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: f5-bigip-ctlr-01 spec: replicas: 1 template: metadata: name: k8s-bigip-ctlr labels: app: k8s-bigip-ctlr spec: # Name of the Service Account bound to a Cluster Role with the required # permissions serviceAccountName: bigip-ctlr containers: - name: k8s-bigip-ctlr # replace the version as needed image: "f5networks/k8s-bigip-ctlr:1.5.1" env: - name: BIGIP_USERNAME valueFrom: secretKeyRef: # Replace with the name of the Secret containing your login # credentials name: bigip-login key: username - name: BIGIP_PASSWORD valueFrom: secretKeyRef: # Replace with the name of the Secret containing your login # credentials name: bigip-login key: password command: ["/app/bin/k8s-bigip-ctlr"] args: [ # See the k8s-bigip-ctlr documentation for information about # all config options # http://clouddocs.f5.com/products/connectors/k8s-bigip-ctlr/latest "--bigip-username=$(BIGIP_USERNAME)", "--bigip-password=$(BIGIP_PASSWORD)", "--bigip-url=192.168.200.82", "--bigip-partition=OpenShift", "--pool-member-type=cluster", "--openshift-sdn-name=/Common/openshift_vxlan", '--manage-routes=true' '--route-http-vserver=testroute' '--route-https-vserver=testroute_https' ] --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: f5-bigip-ctlr-02 spec: replicas: 1 template: metadata: name: k8s-bigip-ctlr labels: app: k8s-bigip-ctlr spec: # Name of the Service Account bound to a Cluster Role with the required # permissions serviceAccountName: bigip-ctlr containers: - name: k8s-bigip-ctlr # replace the version as needed image: "f5networks/k8s-bigip-ctlr:1.5.1" env: - name: BIGIP_USERNAME valueFrom: secretKeyRef: # Replace with the name of the Secret containing your login # credentials name: bigip-login key: username - name: BIGIP_PASSWORD valueFrom: secretKeyRef: # Replace with the name of the Secret containing your login # credentials name: bigip-login key: password command: ["/app/bin/k8s-bigip-ctlr"] args: [ # See the k8s-bigip-ctlr documentation for information about # all config options # http://clouddocs.f5.com/products/connectors/k8s-bigip-ctlr/latest "--bigip-username=$(BIGIP_USERNAME)", "--bigip-password=$(BIGIP_PASSWORD)", "--bigip-url=192.168.200.83", "--bigip-partition=OpenShift", "--pool-member-type=cluster", "--openshift-sdn-name=/Common/openshift_vxlan", '--manage-routes=true' '--route-http-vserver=testroute' '--route-https-vserver=testroute_https' ]給vs手動綁定Policies
Openshift F5控制器創建好后,在F5上會自動創建兩條Policies, 分別為:openshift_insecure_routes、openshift_secure_routes。
openshift_insecure_routes為HTTP應用服務
openshift_secure_routes為HTTPS應用服務。
綁定Policies與iRule
創建應用(Project名為testapp,Service名為f5-nginx-v1與f5-nginx-v2)
oc new-project testapp oc new-app harbor.example.com/public/nginx:1.14 --name=f5-nginx-v1 --allow-missing-images oc expose dc/f5-test-v1 --port=8080oc expose svc/f5-test-v1 test1.apps.openshift.com oc new-app harbor.example.com/public/nginx:1.14 --name=f5-nginx-v2 --allow-missing-images oc expose dc/f5-test-v2 --port=8080創建iRule,并綁定到VS
F5
說明:請求域名
test1.apps.openshift.com
時,如果客戶端IP為192.168.100.23,則訪問testapp項目下的f5-nginx-v2服務,否則訪問testapp項目下的f5-nginx-v1服務
注意:iRule規則需要在Common的Partition下創建when HTTP_REQUEST { if { [HTTP::host] equals "test1.apps.openshift.com" }{ log local0.info [HTTP::host] if {[IP::addr [IP::client_addr] equals 192.168.100.23/32 ]} { log local0.info "enter 2 pool before" log local0.info [HTTP::host] pool /f5-openShift/openshift_testapp_f5-nginx-v2 log local0.info "enter 2 pool later" } else { log local0.info "enter 3" pool /f5-openShift/openshift_testapp_f5-nginx-v1 } } }測試訪問服務
本地(192.168.100.23)與另一臺非192.168.100.23的機器上綁定hosts
VS的IP地址 test1.apps.openshift.com再訪問test1.apps.openshift.com,查看頁面顯示,訪問不同的Service。
上述就是小編為大家分享的F5與Openshift集成怎么實現灰度發布了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。