Chapter 02

Kubernetes APIの設定

nozomi-nishinohara
nozomi-nishinohara
2021.05.17に更新

KubernetesのログインにOIDCを設定

Master Nodeの設定(kube-apiserverの設定変更)

  • /etc/kubernetes/manifests/kube-apiserver.yamlの編集

ここを編集するだけでStatic Podの自動切替が行われる。

/etc/kubernetes/manifests/kube-apiserver.yaml
apiVersion: v1
kind: Pod
~~ 省略 ~~
spec:
  containers:
  - command:
    - kube-apiserver
    - --oidc-issuer-url=https://accounts.google.com # 例ではGoogleを使用 id_tokenに含まれる「iss」の値を設定する。
    - --oidc-client-id=idpから払い出されるクライアントID
    - --oidc-username-claim=email # ユーザー名として使用するクレーム名
    - --oidc-groups-claim=groups # グループ名として使用するクレーム名
~~ 省略 ~~
  • ClusterRole及びClusterRoleBindingの設定
oidc-role-user.yaml
# 適宜適切なrulesを設定する必要あり。便宜上「*」を設定している。
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
    name: admin-role
rules:
    - apiGroups: ["*"]
      resources: ["*"]
      verbs: ["*"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
    name: admin-binding
subjects:
    - kind: User
      name: # --oidc-username-claimで設定した値を設定する 今回だとメールアドレスを設定
      apiGroup: rbac.authorization.k8s.io
roleRef:
    kind: ClusterRole
    name: admin-role
    apiGroup: rbac.authorization.k8s.io
oidc-role-group.yaml
# 適宜適切なrulesを設定する必要あり。便宜上「*」を設定している。
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
    name: admin-role
rules:
    - apiGroups: ["*"]
      resources: ["*"]
      verbs: ["*"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
    name: admin-binding
subjects:
    - kind: Group
      name: # --oidc-groups-claimで設定した値を設定する admin,manager etc...
      apiGroup: rbac.authorization.k8s.io
roleRef:
    kind: ClusterRole
    name: admin-role
    apiGroup: rbac.authorization.k8s.io

kubectlの設定

  • credentialsの設定
kubectl config set-credentials cluster-iaas \
--auth-provider=oidc \
--auth-provider-arg=idp-issuer-url=サーバー側と同一の設定を行う \
--auth-provider-arg=client-id=サーバー側と同一の設定を行う \
--auth-provider-arg=client-secret=idpから払い出されるシークレットキー \
--auth-provider-arg=refresh-token=ログイン後に取得される「refresh_token」 \
--auth-provider-arg=id-token=ログイン後に取得される「id_token」
  • clusterの設定
kubectl config set-cluster cluster-iaas --server=https://k8s-apiserverアドレス or ドメイン --certificate-authority=ca証明書ファイル
# or
--certificate-authority-data=ca証明書ファイル内容をBase64に変換
  • contextの設定
kubectl config set-context iaas-oidc --cluster=cluster-iaas --user=cluster-iaas