1. 程式人生 > >openshift/origin工作記錄(11)——Openshift3.6向Openshift3.11升級以及CVE-2018-1002105漏洞修復

openshift/origin工作記錄(11)——Openshift3.6向Openshift3.11升級以及CVE-2018-1002105漏洞修復

由於kubernetes的CVE-2018-1002105重大漏洞,需要對Openshift叢集進行版本升級。
當前執行的Openshift叢集版本為v3.6,目標為升級到版本v3.11。

這裡只記錄升級過程中碰到的坑,不記錄升級細節。
不能跨版本升級,升級路線為:

v3.6—>v3.7—>v3.9—>v3.10—>v3.11

由於我是離線環境,所以在升級過程中都需要到對應版本的openshift-ansible/roles/openshift_repos/templates下進行yum換源。

v3.6升級v3.7

ansible版本問題

主要參考下圖:
在這裡插入圖片描述v3.6版本我用的是ansible-2.3.3,這裡更新到ansible-2.6.6(之後的升級過程一直用的是這個版本,不推薦>=2.7版本的ansible,可能會導致升級出錯)。

設定網路引數

需要和/etc/origin/master/master-config.yaml檔案中的相應引數對應。示例如下:

openshift_portal_net=172.30.0.0/16
osm_cluster_network_cidr=10.128.0.0/14
osm_host_subnet_length=9

v3.7升級v3.9

升級過程順利,沒遇到坑

v3.9叢集證書重新生成

之前嘗試v3.10升級v3.11,因為最早安裝openshift的時候,沒對證書到期時間進行設定,導致部分證書即將在一年內到期,叢集升級失敗,所以在正式升級的時候需要重新生成一下叢集證書。

生成證書的過程:
重新生成OKD CA證書—>重新生成ETCD CA證書—>根據已有的CA證書重新生成所有證書

v3.9版本證書重新生成需要在/etc/ansible/hosts檔案中指定節點的以下引數

openshift_hostname
openshift_public_hostname
openshift_ip
openshift_public_ip
openshift_master_cluster_hostname
openshift_master_cluster_public_hostname

同時設定證書的有效時間

openshift_hosted_registry_cert_expire_days=3650
openshift_ca_cert_expire_days=3650
openshift_node_cert_expire_days=3650
openshift_master_cert_expire_days=3650
etcd_ca_default_days=3650

由於在之前的升級過程中,我配置了

ansible_service_broker_install=false
template_service_broker_install=false
openshift_enable_service_catalog=false

導致了部分證書生成錯誤,這裡我手動在ansible-playbook指令碼中禁用了service_broker相關的證書生成。

碰到了類似於以下內容的錯誤:

File \"/usr/lib64/python2.7/_strptime.py\", line 325, in _strptime\r\n (data_string, format))\r\n**ValueError: time data 'May 3 14:19:31 2020 GMT' does not match format '%b %d %H:%M:%S %Y %Z'\r\n", "msg": "MODULE FAILURE"**, "rc": 1}

github issue連結 https://github.com/openshift/openshift-ansible/issues/8267
解決辦法連結 https://github.com/openshift/openshift-ansible/commit/0cbb390e010877446ab62bf44be36c44706d3408

證書更新之後可以通過指令碼openshift-ansible/playbooks/openshift-checks/certificate_expiry/easy-mode.yaml驗證。

v3.9升級v3.10

openshift_hostname引數處理

在OKD版本v3.10中,openshift_hostname引數已被刪除。如果之前/etc/ansible/hosts檔案中設定過openshift_hostname,需要使用openshift_kubelet_name_override引數替換。

建立預設的Configmaps

openshift_node_labels的值將會被忽略。
[nodes]下需要為每個節點設定openshift_node_group_name。

需要先執行openshift-ansible/playbooks/openshift-master/openshift_node_group.yml來建立預設的Configmaps

恢復預設的SCC

之前在使用openshift的時候,修改過預設的SCC,這裡需要把系統自帶的SCC恢復預設設定。
通過oc adm policy --config=/etc/origin/master/admin.kubeconfig reconcile-sccs --additive-only=true可以檢視修改過的地方。

node節點和etcd節點為同一個節點時,該節點預設不升級

從openshift-ansible\playbooks\common\openshift-cluster\upgrades\initialize_nodes_to_upgrade.yml程式碼中可以看出,假如沒有設定openshift_upgrade_nodes_label,etcd所在的節點預設不在升級範圍內。
在這裡插入圖片描述
解決辦法:註釋上圖中when: item not in dedicated_etcds,然後重新執行升級指令碼。

v3.10升級v3.11

需要和上文一樣,修改openshift-ansible\playbooks\common\openshift-cluster\upgrades\initialize_nodes_to_upgrade.yml檔案。

CVE-2018-1002105漏洞修復

在這裡插入圖片描述

驗證升級

所有節點資訊如下:
在這裡插入圖片描述
所有pod正確執行。
升級成功。