Pod Security Admission を有効にした Istio のインストール

このガイドに従って、Pod Security Admission コントローラー(PSA)を使用して、メッシュ内の名前空間に`baseline` ポリシーを適用する Istio メッシュをインストール、設定、使用します。

デフォルトでは、Istio はメッシュにデプロイされた Pod に init コンテナ `istio-init` を注入します。`istio-init` は、`NET_ADMIN` および `NET_RAW` 機能を持つコンテナをデプロイするための十分な Kubernetes RBAC 権限を、Pod をメッシュにデプロイするユーザーまたはサービスアカウントに必要とします。

しかし、baseline ポリシーには、許可される機能NET_ADMINまたはNET_RAWが含まれていません。すべてのメッシュ名前空間でprivileged ポリシーの適用を回避するには、Istio Container Network Interface プラグイン を使用したIstioメッシュを使用する必要があります。istio-system 名前空間内の istio-cni-node DaemonSet は、ローカルCNIディレクトリにアクセスするためにhostPath ボリュームを必要とします。これはbaseline ポリシーでは許可されていないため、CNI DaemonSetがデプロイされる名前空間では、privileged ポリシー を適用する必要があります。デフォルトでは、この名前空間はistio-systemです。

PSA を使用した Istio のインストール

  1. istio-system 名前空間を作成し、privileged ポリシーを適用するようにラベル付けします。

    $ kubectl create namespace istio-system
    $ kubectl label --overwrite ns istio-system \
        pod-security.kubernetes.io/enforce=privileged \
        pod-security.kubernetes.io/enforce-version=latest
    namespace/istio-system labeled
    
  2. Kubernetesクラスタバージョン1.25以降に、CNI を使用してIstioをインストールします。

    $ istioctl install --set components.cni.enabled=true -y
    ✔ Istio core installed
    ✔ Istiod installed
    ✔ Ingress gateways installed
    ✔ CNI installed
    ✔ Installation complete
    

サンプルアプリケーションのデプロイ

  1. デモアプリケーションが実行されるデフォルトの名前空間にbaseline ポリシーを適用するための名前空間ラベルを追加します。

    $ kubectl label --overwrite ns default \
        pod-security.kubernetes.io/enforce=baseline \
        pod-security.kubernetes.io/enforce-version=latest
    namespace/default labeled
    
  2. PSA対応の設定リソースを使用してサンプルアプリケーションをデプロイします。

    圧縮
    $ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-psa.yaml@
    service/details created
    serviceaccount/bookinfo-details created
    deployment.apps/details-v1 created
    service/ratings created
    serviceaccount/bookinfo-ratings created
    deployment.apps/ratings-v1 created
    service/reviews created
    serviceaccount/bookinfo-reviews created
    deployment.apps/reviews-v1 created
    deployment.apps/reviews-v2 created
    deployment.apps/reviews-v3 created
    service/productpage created
    serviceaccount/bookinfo-productpage created
    deployment.apps/productpage-v1 created
    
  3. クラスタ内でアプリが実行され、レスポンスのページタイトルをチェックすることでHTMLページを提供していることを確認します。

    $ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
    <title>Simple Bookstore App</title>
    

アンインストール

  1. サンプルアプリケーションを削除します。

    $ kubectl delete -f samples/bookinfo/platform/kube/bookinfo-psa.yaml
    
  2. デフォルトの名前空間のラベルを削除します。

    $ kubectl label namespace default pod-security.kubernetes.io/enforce- pod-security.kubernetes.io/enforce-version-
    
  3. Istioをアンインストールします。

    $ istioctl uninstall -y --purge
    
  4. istio-system 名前空間を削除します。

    $ kubectl delete namespace istio-system
    
この情報は役に立ちましたか?
改善のための提案はありますか?

ご意見ありがとうございます!