阿里云的 k8s 集群连接证书过期后 ArgoCD 无法连接,导致发布失败

前提条件

更新脚本

注意替换 secret 名称

Unix 版本

# 1. 使用 awk 从 kube.yaml 中提取三段 Base64 证书/私钥
CA_DATA=$(awk '/certificate-authority-data:/ {print $2; exit}' kube.yaml | tr -d '\r\n')
CERT_DATA=$(awk '/client-certificate-data:/ {print $2; exit}' kube.yaml | tr -d '\r\n')
KEY_DATA=$(awk '/client-key-data:/ {print $2; exit}' kube.yaml | tr -d '\r\n')

# 2. 拼接为单行 JSON
JSON_STR="{\"tlsClientConfig\":{\"insecure\":false,\"caData\":\"$CA_DATA\",\"certData\":\"$CERT_DATA\",\"keyData\":\"$KEY_DATA\"}}"

# 3. 转为单行 Base64
NEW_CONFIG_BASE64=$(echo -n "$JSON_STR" | base64 -w 0 2>/dev/null || echo -n "$JSON_STR" | base64 | tr -d '\r\n')

# 4. Patch 更新到 Secret 中
kubectl patch secret cluster-c82bbd3ec48184fec94eee5cccd53adcb \
  -n argocd \
  --type='json' \
  -p="[{\"op\": \"replace\", \"path\": \"/data/config\", \"value\": \"${NEW_CONFIG_BASE64}\"}]"

Pwsh 版本

# 1. 从 kube.yaml 提取三段 Base64 证书文本
$kubeText = Get-Content -Path ".\kube.yaml" -Raw

$caData = ($kubeText -split "certificate-authority-data:\s*")[1].Split("`r`n")[0].Trim()
$certData = ($kubeText -split "client-certificate-data:\s*")[1].Split("`r`n")[0].Trim()
$keyData = ($kubeText -split "client-key-data:\s*")[1].Split("`r`n")[0].Trim()

# 2. 组装为哈希表并转换为单行 JSON
$configObj = @{
    tlsClientConfig = @{
        insecure = $false
        caData   = $caData
        certData = $certData
        keyData  = $keyData
    }
}
$jsonStr = $configObj | ConvertTo-Json -Compress -Depth 5

# 3. 转换为单行 Base64
$bytes = [System.Text.Encoding]::UTF8.GetBytes($jsonStr)
$newConfigBase64 = [Convert]::ToBase64String($bytes)

# 4. 执行 kubectl patch 更新 Secret
$patchJson = '[{"op": "replace", "path": "/data/config", "value": "' + $newConfigBase64 + '"}]'
kubectl patch secret cluster-c82bbd3ec48184fec94eee5cccd53adcb -n argocd --type='json' -p $patchJson