説明
Tiller は Helm v2 のサーバー側コンポーネントで、付与された Kubernetes 権限でリソースを管理します。広い権限を持つ Tiller が侵害されたり無断で使われたりすると、複数のワークロードに影響する可能性があります。
Helm v2 のサポートは終了しています。Tiller を使わないサポート対象の Helm へ移行し、実際に残っているサーバーと権限を整理してください。
想定される影響
- Tiller の権限範囲にあるワークロードやクラスターリソースが変更される可能性があります。
- サポート終了したコンポーネントのセキュリティ修正や運用支援を受けられません。
対処方法
- リリース情報を保存し、復旧計画を用意してから、サポートされる Helm へリリース管理を移行してください。
- 移行を確認した後、Tiller の Deployment、Service、専用アカウントと RBAC 権限を削除してください。
- 名前やラベルだけを変更せず、実際の Tiller プロセスとアクセス経路がなくなったことを確認してください。
例
Tiller のデプロイを表す過去の例と、一般のアプリケーションのデプロイを比較しています。tiller-image は説明用の名前で、nginx のバージョンも過去の値です。移行手順や現在の推奨イメージではありません。
変更前
hcl
resource "kubernetes_deployment" "helm_server" {
metadata {
name = "tiller-deploy"
labels = {
app = "helm"
}
}
spec {
replicas = 1
selector {
match_labels = {
app = "helm"
}
}
template {
metadata {
labels = {
app = "helm"
}
}
spec {
container {
name = "helm-server"
image = "tiller-image"
}
}
}
}
}
Tiller サーバーを表す構成です。実際のアクセス範囲は、イメージの動作やアカウント、RBAC の設定などによって異なります。
変更後
hcl
resource "kubernetes_deployment" "app" {
metadata {
name = "service-deploy"
labels = {
app = "web"
}
}
spec {
replicas = 1
selector {
match_labels = {
app = "web"
}
}
template {
metadata {
labels = {
app = "web"
}
}
spec {
container {
name = "web"
image = "nginx:1.7.8"
}
}
}
}
}
一般のアプリケーションの例です。このリソースの追加や名前の変更だけでは既存の Tiller は削除されないため、古いサーバーと関連権限を別途整理してください。