parts/k8s/rotate-certs.ps1 (72 lines of code) (raw):
<#
.DESCRIPTION
This script rotates a windows node certificates.
It assumes that client.key, client.crt and ca.crt will be dropped in $env:temp.
#>
. c:\AzureData\k8s\windowskubeletfunc.ps1
. c:\AzureData\k8s\kuberneteswindowsfunctions.ps1
$global:KubeDir = "c:\k"
$global:AgentKeyPath = [io.path]::Combine($env:temp, "client.key")
$global:AgentCertificatePath = [io.path]::Combine($env:temp, "client.crt")
$global:CACertificatePath = [io.path]::Combine($env:temp, "ca.crt")
function Prereqs {
Assert-FileExists $global:AgentKeyPath
Assert-FileExists $global:AgentCertificatePath
Assert-FileExists $global:CACertificatePath
}
function Backup {
Copy-Item "c:\k\config" "c:\k\config.bak"
Copy-Item "c:\k\ca.crt" "c:\k\ca.crt.bak"
}
function Update-CACertificate {
Write-Log "Write ca root"
Write-CACert -CACertificate $global:CACertificate -KubeDir $global:KubeDir
}
function Update-KubeConfig {
Write-Log "Write kube config"
$ClusterConfiguration = ConvertFrom-Json ((Get-Content "c:\k\kubeclusterconfig.json" -ErrorAction Stop) | out-string)
$MasterIP = $ClusterConfiguration.Kubernetes.ControlPlane.IpAddress
$CloudProviderConfig = ConvertFrom-Json ((Get-Content "c:\k\azure.json" -ErrorAction Stop) | out-string)
$MasterFQDNPrefix = $CloudProviderConfig.ResourceGroup
$AgentKey = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes((Get-Content -Raw $AgentKeyPath)))
$AgentCertificate = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes((Get-Content -Raw $AgentCertificatePath)))
Write-KubeConfig -CACertificate $global:CACertificate `
-KubeDir $global:KubeDir `
-MasterFQDNPrefix $MasterFQDNPrefix `
-MasterIP $MasterIP `
-AgentKey $AgentKey `
-AgentCertificate $AgentCertificate
}
function Force-Kubelet-CertRotation {
Remove-Item "/var/lib/kubelet/pki/kubelet-client-current.pem" -Force -ErrorAction Ignore
Remove-Item "/var/lib/kubelet/pki/kubelet.crt" -Force -ErrorAction Ignore
Remove-Item "/var/lib/kubelet/pki/kubelet.key" -Force -ErrorAction Ignore
try {
$err = Retry-Command -Command "c:\k\windowsnodereset.ps1" -Args @{Foo="Bar"} -Retries 3 -RetryDelaySeconds 10
} catch {
Write-Error "Error reseting Windows node. Error: $_"
throw $_
}
}
function Start-CertRotation {
try
{
$global:CACertificate = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes((Get-Content -Raw $CACertificatePath)))
Prereqs
Update-CACertificate
Update-KubeConfig
Force-Kubelet-CertRotation
}
catch
{
Write-Error $_
throw $_
}
}
function Clean {
Remove-Item "c:\k\config.bak" -Force -ErrorAction Ignore
Remove-Item "c:\k\ca.crt.bak" -Force -ErrorAction Ignore
Remove-Item $global:AgentKeyPath -Force -ErrorAction Ignore
Remove-Item $global:AgentCertificatePath -Force -ErrorAction Ignore
Remove-Item $global:CACertificatePath -Force -ErrorAction Ignore
}