この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

これは未公開の文書です 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 で使用可能です。

  • mapsetSet データ構造の Go 実装を提供します。 このライブラリは、Admission Controller ポリシーにおいて一般的な操作である Set unionintersectiondifference などの操作を書くためのコード量を削減します。

最後に、Admission Controller プロジェクトは、https://github.com/kubewarden/go-policy-template[テンプレート Go ポリシー プロジェクト]を提供し、Admission Controller Go ポリシーを作成するために使用できます。

TinyGo の依存関係を取得する

TinyGo を取得する最も簡単な方法は、アップストリームのコンテナイメージを使用することです。 公式リリースはhttps://hub.docker.com/r/tinygo/tinygo[こちら]であり、開発ブランチからのビルドは自動的にhttps://hub.docker.com/r/tinygo/tinygo-dev[こちら]にプッシュされます。

必要に応じて、TinyGoのhttps://tinygo.org/getting-started/[はじめに]ページを参照して、詳細情報を得てください。

チュートリアルの前提条件

このチュートリアルでは、開発マシンにこれらのツールが必要です:

  • dockerまたは他のコンテナエンジン:WebAssemblyポリシーを構築するために使用されます。 公式のTinyGoコンテナイメージに同梱されているコンパイラを使用します。

  • bats:テストを書くために使用され、その実行を自動化します。

  • kwctl: Kubernetesの外でポリシーを実行するためにAdmission Controllerが提供するCLIツール、その他のアクションのために。 これはドキュメントのこのセクションで説明されています。