DUICUO

Kubernetes ユーザー管理ツール PermissionManager

[[380289]]

権限マネージャー

Permission Manager は、Kubernetes RBAC とユーザー管理用の Web UI を提供し、Kubernetes 権限管理用のユーザーフレンドリーなビジュアル インターフェースを提供するプロジェクトです。

インストール

次のように、https://github.com/sighupio/permission-manager/tree/master/deployments/kubernetes から YAML ファイルをダウンロードします。

  1. [root@qd01-stop-k8s-master001 kubernetes]# ll
  2. 合計4
  3. -rw-r --r-- 1 ルート ルート 2697 1月28日 11:08 deploy.yml  
  4. drwxr-xr-x 2 ルート ルート 37 1月 28 11:14 シード

名前空間を作成する

  1. [root@qd01-stop-k8s-master001 kubernetes]# kubectl名前空間のパーミッションマネージャーを作成します
  2. 名前空間/権限マネージャーを作成しました

シークレットを作成し、それに応じて更新します。

  1. [rancher@qd01-stop-k8snode011 権限マネージャー]$ cat secret.yaml
  2. ---  
  3. apiバージョン: v1
  4. 種類: 秘密
  5. メタデータ:
  6. 名前: 権限マネージャー
  7. 名前空間: 権限マネージャー
  8. タイプ: 不透明
  9. 文字列データ:
  10. PORT: "4000" #サーバー公開されいるポート
  11. CLUSTER_NAME: "kubernetes-cluster" #名前 生成されたkubeconfigファイル使用するクラスター
  12. CONTROL_PLANE_ADDRESS: "https://10.26.29.208:6443" #生成されたkubeconfigファイル使用するコントロールプレーン完全なアドレス
  13. BASIC_AUTH_PASSWORD: "Admin" #基本認証使用されるパスワード(ユーザー名`admin`)

  1. [root@qd01-stop-k8s-master001 kubernetes]# kubectl apply -f secret.yaml
  2. secret/permission-manager を作成しました

展開する

  1. [root@qd01-stop-k8s-master001 シード]# kubectl apply -f crd.yml
  2. 警告: apiextensions.k8s.io/v1beta1 CustomResourceDefinitionv1.16+では非推奨となり、v1.22+では使用できません。apiextensions.k8s.io/v1 CustomResourceDefinition を使用してください。
  3. customresourcedefinition.apiextensions.k8s.io/permissionmanagerusers.permissionmanager。ユーザーが作成しました
  4.  
  5. [root@qd01-stop-k8s-master001 シード]# kubectl apply -f seed.yml
  6. clusterrole.rbac. authorization .k8s.io/template-namespaced-resources___operation が作成されました
  7. clusterrole.rbac. authorization .k8s.io/template-namespaced-resources___developer が作成されました
  8. clusterrole.rbac. authorization .k8s.io/template-cluster-resources___読み取り専用が作成されました
  9. clusterrole.rbac. authorization .k8s.io/template-cluster-resources___admin が作成されました
  10.  
  11.  
  12. [root@qd01-stop-k8s-master001 kubernetes]# kubectl apply -f deploy.yml
  13. サービス/権限マネージャーが作成されました
  14. deployment.apps/permission-manager が作成されました
  15. serviceaccount/permission-manager が作成されました
  16. clusterrole.rbac. authorization.k8s.io/permission-managerが作成されました
  17. 警告: rbac. authorization .k8s.io/v1beta1 ClusterRoleBindingv1.17+では非推奨であり、v1.22+では使用できません。rbac. authorization .k8s.io/v1 ClusterRoleBindingを使用してください。
  18. clusterrolebinding.rbac. authorization.k8s.io/permission-managerが作成されました

パーミッションマネージャーのデプロイが完了しました。警告メッセージは無視しても構いません。YAMLファイル内のAPIバージョンをrbac.authorization.k8s.io/v1に変更することもできます。

Ingress Exposure サービスの使用

ingingress.yaml を作成する

  1. apiバージョン: networking.k8s.io/v1
  2. 種類: イングレス
  3. メタデータ:
  4. 名前: 権限マネージャーイングレス
  5. 名前空間: 権限マネージャー
  6. 注釈:
  7. kubernetes.io/ingress.class: nginx
  8. 仕様:
  9. ルール:
  10. - ホスト: permission.kubeops.net
  11. http:
  12. パス:
  13. - パスタイプ: プレフィックス
  14. パス: /
  15. バックエンド:
  16. サービス:
  17. 名前: 権限マネージャー
  18. ポート:
  19. 番号: 4000

  1. [root@qd01-stop-k8s-master001 kubernetes]# kubectl apply -f ingress.yaml
  2. [root@qd01-stop-k8s-master001 kubernetes]# kubectl get ing -n permission-manager
  3. 警告: extensions/v1beta1 Ingress はv1.14+では非推奨となり、v1.22+では利用できません。networking.k8s.io/v1 Ingress を使用してください。
  4. 名前クラス ホスト アドレス ポート 年齢
  5. permission-manager-ingress <なし> permission.kubeops.net 10.26.29.202,10.26.29.203 80 4分8秒

DNS 解決を手動で追加し、ブラウザで permission.kubeops.net にアクセスし、ユーザー名とパスワード (シークレットで設定) を使用してログインします。

ログイン


現在ユーザーはいませんが、テスト用に通常のユーザーを作成できます。

ユーザーを作成

「新しいユーザーを作成」をクリック


関連情報を入力してください


次に、「保存」をクリックします。

生成された設定ファイルは、ユーザー情報で確認できます。


テスト

構成ファイルを保存し、この構成ファイルを使用してクラスターにアクセスします。

構成ファイルをローカル マシンにコピーし、名前を scofield に変更して、kubectl を使用してテストしました。

  1. [root@qd01-stop-k8s-master001 kubernetes]# kubectl --kubeconfig=scofield po を取得します 
  2. リソースが見つかりませ デフォルトの名前空間。
  3.  
  4. [root@qd01-stop-k8s-master001 kubernetes]# kubectl --kubeconfig=scofield get po -n argo  
  5. サーバーからのエラー(禁止):ポッド禁止されています:ユーザー  「system:serviceaccount:permission-manager:scofield」はリソース「pods」を一覧表示できません  APIグループ  「」  名前空間 argo  

上記の出力は、`default` と `argo` という2つの名前空間をクエリしたことを示していますが、`default` 名前空間のみに必要な権限があり、`argo` 名前空間には権限がありませんでした。これは、ユーザー作成時に付与した権限と一致しています。

詳細は公式サイトをご覧ください。