监控 RKE2 集群证书有效期
|字数总计: 1.2k|阅读时长: 5分钟|阅读量:
本文永久链接: https://www.xtplayer.cn/rke2/monitor-rke2-cluster-certificates-validity/
根据 rke2 官方文档说明 https://docs.rke2.io/reference/metrics ,rke2 目前支持一些指标的输出,比如 rke2_certificate_expiration_seconds。通过 rke2_certificate_expiration_seconds 指标,可以查询 rke2 集群各组件的有效期。并可以通过配置集群监控告警来对证书有效时间进行提醒。
启用 rke2 Metrics 功能
rke2 Metrics 功能默认没有启用,需要在 /etc/rancher/rke2/config.yaml
配置中添加 supervisor-metrics: true
来启用。
通过 rke2 安装脚本或者 rke2 二进制文件部署 rke2 集群
如果是通过 rke2 安装脚本或者 rke2 二进制文件部署的集群,需要在每个 server 节点上创建或者修改 /etc/rancher/rke2/config.yaml
配置文件,添加 supervisor-metrics: true
参数。参数添加之后执行 systemctl restart rke2-server.service
重启服务。重启之后,可以使用以下命令进行测试,
sudo curl -ks --cert /var/lib/rancher/rke2/server/tls/client-admin.crt --key /var/lib/rancher/rke2/server/tls/client-admin.key https://<server_node_ip>:9345/metrics
通过 rancher ui 部署 rke2 集群
如果是通过 rancher ui 部署的 rke2 集群,可以编辑集群的 yaml,在 rkeConfig.machineGlobalConfig
配置下添加 supervisor-metrics: true
, 这样添加的所有的 master 节点将自动在 /etc/rancher/rke2/config.yaml.d/50-rancher.yaml
配置中添加 supervisor-metrics: true
。
rkeConfig: chartValues: rke2-calico: {} dataDirectories: {} etcd: snapshotRetention: 5 snapshotScheduleCron: 0 */5 * * * machineGlobalConfig: cni: calico disable: - rke2-ingress-nginx - rke2-metrics-server disable-kube-proxy: false etcd-expose-metrics: false supervisor-metrics: true machinePoolDefaults: {} machineSelectorConfig: - config: protect-kernel-defaults: false registries: {} upgradeStrategy:
|
rke2 集群安装完成或者更新完成之后,可以使用以下命令进行测试,
sudo curl -ks --cert /var/lib/rancher/rke2/server/tls/client-admin.crt --key /var/lib/rancher/rke2/server/tls/client-admin.key https://<server_node_ip>:9345/metrics
创建 svc 和对应的 endpoints
使用以下脚本在 local 集群中创建 svc 和对应的 endpoints,用来将下游集群资源引入 local 集群中,以供监控服务读取。
注意:需要修改其中的集群名称和 master 节点 ip,如果有多个 rke2 集群,则需要运行多次。
export RKE2_CLUSTER_NAME=<自定义下游 rke2 集群名称> export MASTER_NODE_IPS="192.168.110.200,192.168.110.201"
cat << 'EOF' | envsubst | kubectl apply -f - apiVersion: v1 kind: Service metadata: labels: rke2-cluster: rke2-${RKE2_CLUSTER_NAME} name: rke2-${RKE2_CLUSTER_NAME}-metrics-export namespace: cattle-monitoring-system spec: clusterIP: None clusterIPs: - None internalTrafficPolicy: Cluster ipFamilies: - IPv4 - IPv6 ipFamilyPolicy: RequireDualStack ports: - name: metrics port: 9345 protocol: TCP targetPort: 9345 sessionAffinity: None type: ClusterIP EOF
IFS=',' read -ra IP_ARRAY <<< "$MASTER_NODE_IPS"
cat <<EOF > endpoints.yaml apiVersion: v1 kind: Endpoints metadata: name: rke2-${RKE2_CLUSTER_NAME}-metrics-export namespace: cattle-monitoring-system subsets: - addresses: EOF
for ip in "${IP_ARRAY[@]}"; do echo " - ip: $ip" >> endpoints.yaml done
cat <<EOF >> endpoints.yaml ports: - name: metrics port: 9345 protocol: TCP EOF
kubectl apply -f endpoints.yaml
|
创建用于访问下游 rke2 Metrics 端口的认证密文
此步骤在下游集群中执行,每个 rke2 集群中 master 节点的 client-admin.crt 证书都是相同的,因此只需要随便选择一个 master 节点,执行以下命令生成密文 yaml,然后将生成的 yaml,导入到 local 集群中。
export RKE2_CLUSTER_NAME=<自定义下游 rke2 集群名称>
kubectl create secret generic rke2-${RKE2_CLUSTER_NAME}-metrics-export-auth-certs --dry-run=client \ --namespace=cattle-monitoring-system \ --from-file=ca.crt=/var/lib/rancher/rke2/server/tls/server-ca.crt \ --from-file=tls.crt=/var/lib/rancher/rke2/server/tls/client-admin.crt \ --from-file=tls.key=/var/lib/rancher/rke2/server/tls/client-admin.key -oyaml
|
创建每个下游集群对应的 ServiceMonitor
在 local 集群中执行以下命令,给每个下游集群创建 ServiceMonitor
export RKE2_CLUSTER_NAME=<自定义下游 rke2 集群名称>
cat << 'EOF' | envsubst | kubectl apply -f - apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: rke2-${RKE2_CLUSTER_NAME}-metrics-export namespace: cattle-monitoring-system labels: rke2-cluster: rke2-${RKE2_CLUSTER_NAME} spec: selector: matchLabels: rke2-cluster: rke2-${RKE2_CLUSTER_NAME} endpoints: - port: metrics interval: 30s path: /metrics scheme: https tlsConfig: ca: secret: name: rke2-${RKE2_CLUSTER_NAME}-metrics-export-auth-certs key: ca.crt cert: secret: name: rke2-${RKE2_CLUSTER_NAME}-metrics-export-auth-certs key: tls.crt keySecret: name: rke2-${RKE2_CLUSTER_NAME}-metrics-export-auth-certs key: tls.key EOF
|
添加 PrometheusRule
以下规则如果证书有效期小于 90 天就会触发告警,可以根据需要修改时间天数。
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: annotations: prometheus-operator-validated: 'true' name: rke2-metrics-rules namespace: cattle-monitoring-system spec: groups: - name: rke2_certificate_expiration rules: - alert: rke2_certificate_expiration_seconds expr: rke2_certificate_expiration_seconds/60/60/24 < 90 for: 0s labels: rke2_certificate_expiration: test
|
添加 AlertmanagerConfig
以下是一个测试示例,示例中没有添加 receiver,导入示例后重新编辑,然后根据需要添加 receiver。
其中 matchers 设置为泛匹配,任何触发的告警都将通过此 AlertmanagerConfig 进行发送。如果需要针对前面设置的 PrometheusRule 进行匹配告警,则需要修改 matchers 标签为 rke2_certificate_expiration=test 。
apiVersion: monitoring.coreos.com/v1alpha1 kind: AlertmanagerConfig metadata: name: rke2-certificate-expiration-alert namespace: cattle-monitoring-system spec: route: groupBy: [] groupInterval: 5m groupWait: 60s matchers: - matchType: '=~' name: .* value: .* repeatInterval: 4h
|