|
この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。 |
|
これは未公開の文書です Admission Controller 1.34-dev. |
Goでポリシーを作成する
|
GoのWebAssemblyサポートは急速に進化しています。 このページは2023年12月に最終更新されました。 |
公式のGoコンパイラは、v1.21以降、ブラウザ外で実行するためのWebAssemblyバイナリを生成できます。
SUSE Security Admission Controllerで使用可能なWebAssemblyバイナリを構築できる別のGoコンパイラがあります。 このコンパイラプロジェクトはhttps://tinygo.org/[TinyGo]です。
TinyGoは、LLVMに基づいた新しいコンパイラを作成することで、Goプログラミング言語を組み込みシステムや現代のウェブに持ち込みます。
TinyGoプログラムは、BBC micro:bitやArduino Unoなど、94種類以上の異なるマイクロコントローラボードでコンパイルして実行できます。
TinyGoは、非常にコンパクトなサイズのWebAssembly(Wasm)コードも生成できます。 WebAssemblyシステムインターフェース(WASI)ファミリーのインターフェースをサポートするウェブブラウザやサーバー、エッジコンピューティング環境向けにプログラムをコンパイルできます。
Admission Controllerプロジェクトは、現在、2つの理由からTinyGoの使用を推奨しています:
-
バイナリが小さい
-
関数をランタイムにエクスポートする能力によるhttps://wapc.io[waPC]のサポート
TinyGoの制限
TinyGoはまだすべてのGo機能をサポートしていません。現在のプロジェクトの状況を確認するには、TinyGo言語サポートhttps://tinygo.org/lang-support/[ページ]をご覧ください。
現在、最大の制限は完全にサポートされた`reflect`パッケージがないことです。
これは、公式のKubernetes Go APIタイプ(例:k8s.io/api/core/v1)がコンパイルされないことを意味します。
Admission Controller ポリシーは、ポリシー設定や Kubernetes によって受信されたリクエストなどの JSON データを処理する必要があります。
TinyGo の現在の制限にもかかわらず、それを使用して Admission Controller 検証ポリシーを書くことは依然として簡単です。
ツール
Admission Controller ポリシーを書くには、TinyGo のバージョンが v0.28.1 よりも大きい必要があります。
しかし、最良の結果を得るためには最新のバージョンを使用してください。
|
古いバージョンの TinyGo を使用すると、Go のリフレクションのサポートが限られているため、ランタイムエラーが発生します。 |
これらの Go ライブラリは、Admission Controller ポリシーを書く際に役立ちます:
-
Admission Controller Go SDK: 必要なコードの量を減らす構造と関数を提供します。 また、テストヘルパーも提供します。
-
Kubernetes Go タイプ: 公式 Kubernetes Go タイプは、TinyGo では使用できません。 このモジュールは、TinyGo に優しい方法で全ての Kubernetes タイプを提供します。
-
gjson: これは、JSON ドキュメントの迅速なナビゲーションとデータ取得のためのクエリ言語を提供します。 このライブラリは、Go の
encoding/jsonによって提供されるstdlibパッケージを使用していないため、TinyGo で使用可能です。 -
mapset: Set データ構造の Go 実装を提供します。 このライブラリは、Admission Controller ポリシーにおいて一般的な操作である Set
union、intersection、differenceなどの操作を書くためのコード量を削減します。
最後に、Admission Controller プロジェクトは、https://github.com/kubewarden/go-policy-template[テンプレート Go ポリシー プロジェクト]を提供し、Admission Controller Go ポリシーを作成するために使用できます。