kubestronautへの道 ~CKAD編 その5~

tech article

本記事の内容

前回に引き続いてUdemyのKubernetes Certified Application Developer (CKAD) with Testsというコースを受講していた中で気になったところをメモしていきます。
……と言っていますが、こちらは基本的にはCKAの範囲となっています。そのため、CKAD対策としてはあまり必要のない知識です。参考程度にご覧ください。

今回は以下のセクションに基づいています

#9 Security

勉強記

kubeconfig

クラスターにおいて、ユーザー、名前空間、認証の仕組みに関する情報を管理するためのファイル。
kubectlは、kubeconfigファイルによってクラスターを選択するために必要な情報を判断し、クラスターのAPIサーバーと通信する。

kubeconfigと呼ばれているが、ファイルの名前がkubeconfigというわけではない。
デフォルトでは、kubectlは$HOME/.kubeディレクトリ内にあるconfigという名前のファイルを探索する。

KUBECONFIG環境変数を設定するか、kubectlコマンド実行時に--kubeconfigフラグで指定することで、別のkubeconfigファイルを指定することもできる。

kubectl config

kubeconfigファイルを使用してクラスターアクセスを組織する
kubeconfigを使用すると、クラスターに、ユーザー、名前空間、認証の仕組みに関する情報を組織できます。kubectlコマンドラインツールはkubeconfigファイルを使用してクラスターを選択するために必要な情報を見つけ、クラスターのAPIサーバーと通信します。 備考:クラスターへのアクセスを設定するために使われ...

kubeconfigファイルの内容を変更するためのコマンド。
このコマンドを使わずに実際にファイルを編集して設定を変更することもできる。

kubectl config
Synopsis Modify kubeconfig files using subcommands like "kubectl config set current-context my-context". The loading order follows these rules: If the --kubecon...

マージされたファイルの編集時のみ少し注意が必要。
既存の値を変更するときは、その値が存在するファイルの内容が変更される。
新しい値を追加するときは、最初のファイルに内容が追記される。

Role Base Access Control

Using RBAC Authorization
Role-based access control (RBAC) is a method of regulating access to computer or network resources based on the roles of individual users within your organizati...

Role Base Access Control(RBAC)は、個々のユーザーに対してリソースへのアクセス権限をきめ細やかに制御する方法。

/etc/kubernetes/manifests/kube-apiserver.yaml のspec.containers.command
--authorization-modeに認可モードの設定を記載する。
RBACを利用する場合は--authorization-mode=RBACと設定する。

role/clusterRole

権限のセットを表すルールを設定するリソース。
権限は許可ルールのみが存在する。拒否ルールはない。

role/clusterRoleの違いは、権限の範囲がnamespaceに限定されるか、クラスター全体に影響するのかの違い。

rolebinding/clusterRoleBinding

role/clusterRoleをユーザーに割り当てるリソース。
目には目を、歯には歯を、roleにはrolebindingを、clusterroleにはclusterrolebindingを紐づける。

バインディングを作成した後、それが参照する Role または ClusterRoleは変更不可となる。
バインディングの を変更しようとすると、roleRef検証エラーが発生する。
roleRefバインディングの を変更する場合は、バインディング オブジェクトを削除して、代わりのものを作成しなければならない。

admission controller

Admission Controllers Reference
This page provides an overview of Admission Controllers. What are they? An admission controller is a piece of code that intercepts requests to the Kubernetes AP...

Kubernetes API サーバーへのリクエスト(基本的にkubectlで送るやつ)の認証と認可が行われた後に、内容をインターセプトするコード。

リクエストの検証、変更、またはその両方ができる。ただし読み取り操作(get, watch, list)はブロックできない。

大きく分けてMutatingAdmissionWebhook, ValidatingAdmissionWebhookという2種類のタイプが存在する。

MutatingAdmissionWebhook

リソースがAPIサーバーに送信された際に、そのリソースを変更(mutate)するためのWebhook。
例:Podが作成される前に特定のラベルを追加する、リソースのフィールドを設定する、など。

ValidatingAdmissionWebhook

リソースがAPIサーバーに送信された際に、そのリソースが特定のルールに従っているかどうかを検証(validate)するためのWebhook。
例:Podが特定のラベルを持っているかどうかを確認する、リソースのフィールドが正しい値を持っているかどうかを検証する、など。

順序としてはMutatingAdmissionWebhookValidatingAdmissionWebhook の順でチェックが行われる。

/etc/kubernetes/manifests

Implementation details
FEATURE STATE: Kubernetes v1.10 kubeadm init and kubeadm join together provide a nice user experience for creating a bare Kubernetes cluster from scratch, that ...

ディレクトリ構造の話。
ぶっちゃけCSPを利用してKubenetesクラスターを構築する場合はあまり気にすることはない。
さらに、CKADじゃなくてCKAの範囲なのでCKADを受ける際はあまり気にしなくてよい(はず)。
まあそれを言えばこの記事全体としてそうなのだけれども。

/etc/kubernetes/manifests/

静的pod(Kubeletが直接管理するpod)に関するマニフェストファイルを配置するディレクトリ。
以下のマニフェストファイルが存在する。

  • etcd.yaml
  • kube-apiserver.yaml
  • kube-controller-manager.yaml
  • kube-scheduler.yaml

/etc/kubernetes/

コントロールプレーンコンポーネントのID情報が記述されている kubeconfigファイルを配置するディレクトリ。

  • kubelet.confbootstrap-kubelet.confTLS ブートストラップ中)
  • controller-manager.conf
  • scheduler.conf
  • admin.confクラスタ管理者とkubeadm自体
  • super-admin.confRBACをバイパスできるクラスタスーパー管理者向け

ちなみに……

ChatGPTに質問したところ、

  • kube-apiserverkube-schedulerkube-controller-managerなどのコントロールプレーンコンポーネントは、ホストシステム上で直接プロセスとして実行されます。

ということらしいのですが、ソースが見つけられなくて困ってます。
公式ソースで記述を見つけた方、教えてください!
コメントはスパムまみれでちゃんと見てないのでお問い合わせからメールで教えてください。

API version

API概要
このセクションでは、Kubernetes APIのリファレンス情報を提供します。 REST APIはKubernetesの基本的な構造です。 すべての操作とコンポーネント間の通信、および外部ユーザーのコマンドは、REST API呼び出しでありAPIサーバーが処理します。 その結果、Kubernetesプラットフォーム内...

APIを使えるようにするには/etc/kubernetes/manifests/kube-apiserver.yaml のspec.containers.command--runtime-configに使用したいAPIを記述する。

Custom Resources

カスタムリソース
カスタムリソース はKubernetes APIの拡張です。このページでは、いつKubernetesのクラスターにカスタムリソースを追加するべきなのか、そしていつスタンドアローンのサービスを利用するべきなのかを議論します。カスタムリソースを追加する2つの方法と、それらの選択方法について説明します。 カスタムリソース リ...

そもそもリソースとは、Kubernetes APIのエンドポイントで、特定のAPIオブジェクトのコレクションを保持するものである。

ちょっと難しくてよくわからないが、podとかserviceとかって感じで抽象化されたエンティティを、利用者が独自に設定して使えるようにする、みたいなことだと理解している。

よくわからんからわかりやすく解説してるサイトとかあったら教えてほしいです。お願いします。

CustomResourceDefinition(CRD)

カスタムリソースを定義するリソース。ややこしい。

クラスター内でどんなカスタムリソースが使えるの確認したいときは

kubectl describe crd <custom resource name>

で確認できる。

以下がCRDの例。

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: internals.datasets.kodekloud.com 
spec:
  group: datasets.kodekloud.com
  versions:
    - name: v1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                internalLoad:
                  type: string
                range:
                  type: integer
                percentage:
                  type: string
  scope: Namespaced 
  names:
    plural: internals
    singular: internal
    kind: Internal
    shortNames:
    - int

タイトルとURLをコピーしました