# 托管网格 APIServer 证书过期处理办法 ## 问题现象 为了安全起见,托管网格的证书的有效期仅为一年,我们需要定期重新生成证书以确保集群服务正常。 如果在界面发现网格状态异常,且查看控制面集群的 hosted-apiserver 日志,发现类似以下的信息: ```info x509:certificate has expired or is not yet valid MspiderHostedKubeAPICertExpiration ``` 则表示证书已过期或即将过期,需要更换。 ## 影响范围 证书过期不会影响业务正常运行,但是会影响策略下发、应用新建或重启等操作,需要及时更换。 ## 修复方案 对于已经安装的网格,我们需要手动处理证书更新的过程。 首先,根据下面的 yaml,替换其中所有的 `MESH_ID` 为网格 ID(界面上的名字,如 hosted-demo)。 ```yaml apiVersion: batch/v1 kind: Job metadata: name: MESH_ID-hosted-apiserver-certs-renew namespace: istio-system spec: parallelism: 1 completions: 1 template: spec: serviceAccountName: mspider-mcpc restartPolicy: Never volumes: - name: etcd-certs secret: secretName: MESH_ID-etcd-certs - name: kube-certs secret: secretName: MESH_ID-kube-certs containers: - name: init-certs image: release.daocloud.io/mspider/self-hosted-apiserver:0.0.13 imagePullPolicy: IfNotPresent env: - name: MESH_ID value: MESH_ID - name: KUBE_CERT_SECRET value: MESH_ID-kube-certs - name: ETCD_CERT_SECRET value: MESH_ID-etcd-certs - name: KUBECONFIG_SECRET value: MESH_ID-apiserver-admin-kubeconfig - name: EXT_SANS value: MESH_ID-hosted-apiserver,MESH_ID-hosted-apiserver.istio-system,MESH_ID-hosted-apiserver.istio-system.svc,MESH_ID-hosted-apiserver.istio-system.svc.cluster.local command: - bash - -c volumeMounts: - name: etcd-certs mountPath: /etc/kubernetes/pki/etcd - name: kube-certs mountPath: /etc/kubernetes/pki args: - |- set -ex cd /etc/kubernetes/pki if [ ! -f ca.crt ]; then echo "ca.crt not found" exit 1 fi d=$(mktemp -d) cp -Lrf /etc/kubernetes/pki/* ${d} cd ${d} # renew certs kubeadm certs renew all --cert-dir ${d} files=$(for a in $(find . -maxdepth 1 -type f); do echo -n " --from-file $a "; done) cat > /tmp/secret-patch.json < /tmp/secret-patch.json < /tmp/secret-patch.json <