延長(zhǎng)集群核心證書(shū)的有效期
OpenShift集群正常運(yùn)行中涉及到非常多的證書(shū)彩郊,有各節(jié)點(diǎn)通信的證書(shū)前弯,有數(shù)據(jù)庫(kù)的證書(shū)蚪缀,有私有鏡像倉(cāng)庫(kù)的證書(shū),還有各種組件的證書(shū)(EFK恕出、ClusterMonitor询枚、Metrics等)。對(duì)于集群的相關(guān)證書(shū)可以通過(guò)在inventory文件中添加如下配置就可以非常方便地更改相關(guān)證書(shū)的默認(rèn)有效期浙巫。
openshift_hosted_registry_cert_expire_days=3650
openshift_ca_cert_expire_days=3650
openshift_master_cert_expire_days=3650
etcd_ca_default_days=3650
但是以上的幾個(gè)配置對(duì)于一些組件并不起作用金蜀,如EFK等。
延長(zhǎng)一些特殊組件證書(shū)的有效期
openshift自簽應(yīng)用證書(shū)的有效期為2 or 5年的畴。其中crt證書(shū)默認(rèn)為兩年渊抄,ca證書(shū)為5年。例如es中的證書(shū)中苗傅,admin-ca有效期為5年抒线,admin-crt有效期為2年。
也就是說(shuō)按照當(dāng)前OpenShift安裝的默認(rèn)步驟安裝的EFK組件渣慕,證書(shū)最短有效期為兩年嘶炭,兩年后需要執(zhí)行證書(shū)更新操作。而ES證書(shū)更新時(shí)逊桦,需要對(duì)ES應(yīng)用進(jìn)行重啟眨猎,這將會(huì)影響到ES的可用性。那么如果我們希望在在安裝部署EFK組件的時(shí)候强经,將證書(shū)設(shè)置為更長(zhǎng)的時(shí)間的話睡陪,就不需要進(jìn)行證書(shū)的更新,也就不會(huì)影響到ES的服務(wù)了匿情。那么怎樣做到這一點(diǎn)呢兰迫?
帶著這個(gè)問(wèn)題,仔細(xì)研究了OpenShift部署的腳本炬称,發(fā)現(xiàn)要實(shí)現(xiàn)這點(diǎn)并不困難汁果,只需要將生成證書(shū)的地方添加過(guò)期時(shí)間就ok了。
與相關(guān)證書(shū)有效期有關(guān)的地方有如下五類(lèi):
1. 使用create-signer-cert命令創(chuàng)建的證書(shū)
以ES服務(wù)為例玲躯,admin-ca證書(shū)的有效期時(shí)間默認(rèn)為5年据德,將roles/openshift_logging/tasks/generate_certs.yaml
中的oc adm ca create-signer-cert命令添加過(guò)期時(shí)間--expire-days=36500
,例如
{{ openshift_client_binary }} adm --config={{ mktemp.stdout }}/admin.kubeconfig ca create-signer-cert
--key={{generated_certs_dir}}/ca.key --cert={{generated_certs_dir}}/ca.crt
--serial={{generated_certs_dir}}/ca.serial.txt --name=logging-signer-test --expire-days=36500
2. 使用keytool創(chuàng)建的證書(shū)
以ES服務(wù)為例跷车,admin-crt有效期時(shí)間默認(rèn)為2年棘利。將roles/openshift_logging/files/generate-jks.sh
腳本中的默認(rèn)過(guò)期時(shí)間設(shè)置-validity設(shè)置為36500(一百年)即可,例如
keytool -genkey \
-alias $NODE_NAME \
-keystore $dir/$NODE_NAME.jks \
-keyalg RSA \
-keysize 2048 \
-validity 36500\
-startdate "$startdate" \
-keypass $ks_pass \
-storepass $ks_pass \
-dname "CN=$NODE_NAME, OU=OpenShift, O=Logging"
3. 使用create-server-cert命令創(chuàng)建的證書(shū)
oc adm ca create-server-cert命令創(chuàng)建的證書(shū)的過(guò)期時(shí)間為2年朽缴,所以對(duì)于這些命令生成的證書(shū)腳本也需要設(shè)置過(guò)期時(shí)間--expire-days=36500
,例如metrics_server/tasks/generate_certs_and_apiservice.yaml
文件中:
- name: generate new serving cert secrets if needed
when: existing_metrics_server_secret.rc != 0
block:
- name: generate ca certificate chain
command: >
{{ openshift_client_binary }} adm ca create-signer-cert
--config={{ mktemp.stdout }}/admin.kubeconfig
--key='{{ mktemp.stdout }}/ca.key'
--cert='{{ mktemp.stdout }}/ca.crt'
--serial='{{ mktemp.stdout }}/ca.serial.txt'
--name="metrics-signer@{{lookup('pipe','date +%s')}}"
--expire-days=36500
- name: generate metrics-server keys
command: >
{{ openshift_client_binary }} adm ca create-server-cert
--config={{ mktemp.stdout }}/admin.kubeconfig
--key='{{ mktemp.stdout }}/metrics-server.key'
--cert='{{ mktemp.stdout }}/metrics-server.crt'
--hostnames='metrics-server,metrics-server.{{ openshift_metrics_server_project }}.svc,metrics-server.{{ openshift_metrics_server_project }}.svc.cluster.local'
--signer-cert='{{ mktemp.stdout }}/ca.crt'
--signer-key='{{ mktemp.stdout }}/ca.key'
--signer-serial='{{ mktemp.stdout }}/ca.serial.txt'
--expire-days=36500
4. 使用oc adm ca create-master-certs創(chuàng)建的證書(shū)
oc adm ca證書(shū)創(chuàng)建相關(guān)的命令還有create-master-certs善玫,通過(guò)它能夠創(chuàng)建master的證書(shū),OpenShift已經(jīng)提供了相關(guān)的配置ansible/hosts中添加變量:openshift_master_cert_expire_days
與openshift_ca_cert_expire_days
來(lái)設(shè)置證書(shū)的過(guò)期時(shí)間密强,不需要更改playbook腳本與shell腳本蝌焚。
5. 使用openssl創(chuàng)建的證書(shū)
openssl req -out xx.csr -days 712這是腳本中創(chuàng)建證書(shū)默認(rèn)指定為2年裹唆∈某猓可將-days 712改為新的有效期時(shí)間只洒。例如roles/openshift_logging/tasks/generate_pems.yaml
。
另外openssl ca -in ...
也需要添加-days 36500
劳坑,也在該文件下
openssl ca -in {{generated_certs_dir}}/{{component}}.csr -notext -out {{generated_certs_dir}}/{{component}}.crt
-config {{generated_certs_dir}}/signing.conf -extensions v3_req -batch -extensions server_ext -days 36500