openshift/origin工作记录(11)——Openshift3.6向Openshift3.11升级以及CVE-2018-1002105漏洞修复

版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址:http://blog.csdn.net/huqigang,内容如有错误,欢迎留言指出,谢谢! https://blog.csdn.net/huqigang/article/details/84840197

由于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正确运行。
升级成功。

猜你喜欢

转载自blog.csdn.net/huqigang/article/details/84840197