k3sユーザー管理メモ

背景

ラズパイ上でk3sでk8nを動かしている。 ユーザー管理周りを整備していきたい。ただ煩雑なので現状はk3sのサーバにログインして実行している。 おいおい設定していきたいがメモ

認証方法

Kubernetesでは、ユーザーは事前に定義された認証メカニズムを通じて認証される。 認証システムは複数ある

静的トークンファイル

APIサーバーを起動する際に–token-auth-fileフラグを使用して指定されたファイル。 このファイルはトークン、ユーザー名、UID、および所属するグループを含む。

認証 | Kubernetes

証明書認証

クライアント証明書をAPIサーバーに提示して認証。 APIサーバーは–client-ca-fileフラグで指定されたCAによって署名された証明書を受け入れる。

OpenID Connect Tokens

認証 | Kubernetes

OIDCプロバイダーを通じてトークンによる認証をサポート。

アクセスできるリソースの制限

認証後、ユーザーがクラスター内のリソースに対して実行できる操作は、認可ポリシーによって制御されます。Kubernetes には以下の認可モードがあります:

  • Node
    • Node認可は、kubeletが所有するノードリソースにのみアクセスを許可する。
  • ABAC (Attribute-Based Access Control)
    • 属性に基づくアクセス制御。ポリシーはファイルで管理。
  • RBAC (Role-Based Access Control)
    • ロールに基づくアクセス制御。最も一般的で、役割を定義してユーザーやグループに割り当てる。
  • Webhook
    • 外部のREST APIサービスに認可判断を委託。

RBACの例

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: "example-user"
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io