Kubernetes バージョン 1.25 概要 #aqua #セキュリティ #k8s
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本ブログは「Aqua Security」社の技術ブログで2022年8月25日に公開された「 Kubernetes Version 1.25: An Overview 」の日本語翻訳です。
Kubernetes バージョン 1.25 概要
Kubernetes v1.25 がリリースされ、13個 の Stable、10個 の Beta、15個 の Alpha、そして2個 の Deprecated(非推奨)を含む 40 の新しい機能拡張が行われました。このリリースにおける注目すべき機能の紹介、Pod Security Admission(PSA)によるセキュリティの適用、クラスターが containerd を使用しているかの検証、機能の概要について説明します。これらの改善は、ストレージ、Auth、ネットワーク、セキュリティなど、いくつかのセクション(SIG)にまたがっています。
PSPが撤去された今こそ、PSAを活用しよう
PSA は、ユーザビリティを向上させるために設計されており、セキュリティの詳細機能を知らなくても利用できます。PSA は、Pod を Pod Security Standard(PSS)に照らして評価し、Pod の機能を許可または拒否するアドミッションコントローラーです。
PSSでは、特権モードによる非常に寛容なものから、Pod内の最小特権の原則を適用しようとする制限付きモードまで、特権、ベースライン、制限の3つのレベルを定義しています。
これらの制御の組み合わせ(画像参照)により、セキュリティポリシーが決定されます。たとえば、spec.ephemeralContainers[*].securityContext.runAsUser に RunAsAny という値を指定すると、Privileged ポリシーのコントロールの1つとなります。Pod Security Standard(PSS)の詳細については、こちらをご覧ください。
PSA はネームスペースラベルを利用して強制力を発揮し、インストール時に強制、監査、警告などのモードを設定できます。PSA と PSP を使った yaml サンプルはこちらです。
Security Policy Level | PSA | PSP |
Privileged | Privileged namespace | Privileged |
Baseline | Baseline namespace | Baseline |
Restricted | Restricted namespace | Restricted |
PSA の詳細については、Microsoft の Lachlan Evenson の講演「The Hitchhiker's Guide to Pod Security」や、 k8s blog の「PodSecurityPolicy:The Historical Context」、PSA のリポジトリをご覧ください。
Dockershimは1.24から削除
Dockershim は v1.24 から削除されました。あなたのクラスターでは containerd を使用していますか?EKS は次のリリースでサポートが終了し、AKS と GKE は v1.19 から containerd をデフォルトで使用していることに注意してください。以下は、クラウドプロバイダーに基づく現在のデフォルトの Kubernetes のバージョンです。
Default version |
||
EKS | 1.23.7 |
Amazon EKS は、EKS 1.24 から Dockershim のサポートを終了する予定です。dockershim deprecation についての詳細はこちら。 |
AKS | 1.24 |
Kubernetes v1.19 以降では、コンテナランタイムのデフォルトが containerd になっています。AKS と dockershim についての詳細はこちら。 |
GKE | 1.24 |
GKE v1.19 以降では、Linux ノードのデフォルトのノードイメージは Container-Optimized OS with containerd(cos_containerd)です。 |
エフェメラルコンテナ - kubectl debug をサポートし、実行中の Pod でエフェメラルコンテナを起動します。例えば、ディストロレスイメージを使用すると、シェルやデバッグユーティリティが含まれないため、トラブルシューティングが困難になります。エフェメラルコンテナは、デバッグ用のディストロレスイメージのユースケースとして最適です。詳しくは k8s の公式ドキュメントをご覧ください。
kubectl debug -it my-distroless --image=busybox:1.28 --target=ephemeral-demo
Cgroup v2 のサポート - Cgroups v2 には、プロセス階層内にシンプルさを追加したり、ルートレスコンテナにリソース制限を課すなど、多くの利点があります。
なぜ Cgroup v2 が重要なのかについては、「5 Years of Cgroup v2:The Future of Linux Resource Control」や「Five Things to Prepare for Cgroup v2 with Kubernetes」で詳しく説明しています。詳しくは、提案 KEP-2254 を参照してください。
Local Ephemeral Storage Capacity Isolation - これは、リクエスト/リミットの設定を含む、Pod およびコンテナレベルでのローカルエフェメラルストレージの分離をサポートするものです。詳しくは、k8s の公式ドキュメントおよび提案 KEP-361 を参照してください。
Network Policy におけるポート範囲(ただし endPort) - NetworkPolicy において、単一のポートではなく、ポートの範囲をターゲットにできます。詳しくは、k8s 公式ドキュメントと提案 KEP-2079 を参照してください。
CSI 移行 - Container Storage Interface(CSI)は GA されたため、移行先ではインツリーボリュームプラグインを削除し、アウトオブツリーの CSI ドライバに移行されました。scaleio、flocker、quobyte、storageos ドライバは削除され、GlusterFS と Portworx は v1.25 で追加されました。各ストレージドライバのステータスの詳細については、k8s の公式ドキュメントを参照してください。
CRD 検証言語のベータ移行 - Google プロジェクトによる言語であるCELは、カスタムリソースの検証に使用できます。詳しくは k8s のドキュメントを参照してください。
KMS v2の改善 - KMS v2alpha1 API は、パフォーマンス、ローテート、観測性の改善を追加するために導入されました。詳しくは、提案 KEP-3299 を参照してください。
Seccomp のデフォルト - すべてのワークロードのデフォルトの seccomp プロファイルとして RuntimeDefault を使用できるようになりました。詳しくは、公式の k8s ドキュメントと提案 KEP-3240 を参照してください。
IP Tables チェーン所有権のクリーンアップ - kubelet と kube-proxy の間の IP Tables チェーン所有権の混乱を整理します。詳しくは、提案 KEP-3178 を参照してください。
その他の注目すべきアップデートは以下の通りです。
- Windows のサポートが改善されました:Windows Operational Readiness - containerd を使用した Windows の適合性テストが可能となりました。
- Kubernetes のコンテナレジストリを、k8s.gcr.io から registry.k8s.io に移動しました。
- Kube-proxy を ディストロレスイメージに移行しました。PR の詳細については、こちらを参照してください。
Kubernetes v1.25 の公式アナウンスとブログ記事はこちらから、リリースノートはこちらから参照してください。