Open6

Kubernetesマイクロサービス開発の実践

silvasilva

1-3-1 コンテナオーケストレーションの役割

コンテナオーケストレーションとは

現場では、ビジネスのワークロードに応じて適切にコンテナを配置するなどの管理が必要。このように、コンテナを動的に管理することをコンテナオーケストレーションという。

主な機能

  • コンテナのスケジューリング・・・コンテナのあるべき状態を宣言することで、適切なリソース配置を行う
  • インフラの抽象化・・・各クラウドリソースを抽象化する役割を担う
  • コンテナのセルフヒーリング・・・たとえ障害が発生しても、ユーザーが要求した状態を維持し続ける自己修復機能
silvasilva

2-1-1 Kubernetesクラスタの全体像

オブジェクト

オブジェクト」は、Kubernetes上に展開するコンテナ、ネットワーク、ストレージなどのリソースを抽象的な構成情報として表現したもの。オブジェクトは「マニフェスト」と呼ばれる厚生管理ファイルによって記述でき、Kubernetesの利用者はマニフェストをクラスタに渡すことで、リソースのあるべき状態を指示する。

コントロールプレーン

コントロールプレーン」はオブジェクトとして定義されたリソースの状態をKubernetesクラスタ上に実現するための実装やプロセスのこと。

silvasilva

オブジェクトの概要

まずアプリケーションの開発者やクラスタ管理者は、マニフェストと呼ばれるYAML形式のファイルにオブジェクトの内容を記述し、kubectlというコマンドラインツールを使用してこれをクラスタに渡す。k8sはコントロールプレーンの1つであるkube-apiserverでこの指示を受け取り、オブジェクトを保存する。これにより、k8sはオブジェクトの内容に従ってコンテナやリソースの状態をクラスタ上に維持しようとする。

silvasilva

コントロールプレーンの概要

k8sのコントロールプレーンには以下の2つのグループがある。

  • Control Plane Node: コントロールプレーンノード
  • Worker Node: ワーカーノード

コントロールプレーンノードは、マニフェストによる要求を受付、コンテナやインフラリソースの変更をワーカーノードのコントロールプレーンに伝える役割を担う。
一方で、ワーカーノードはコンテナを動作させるなど、実際のリソースをクラスタ上に実現する仕組みを備えている。基本はコントロールプレーンノードからの指示に従ってコンテナの起動や削除を行うと同時に、自身のサーバー上で起動しているコンテナの状態を監視してコントロールプレーンノードに通知している。

silvasilva

kube-apiserver

kube-apiserverk8sオブジェクトに対する操作を受け付ける、REST APIのサーバー。オブジェクト情報のCRUDを行う。

silvasilva

認可

k8sの対応している認可モジュールは以下の3つ。

  • ABAC
  • RBAC
  • Webhook
    この中でも、RBACの利用が推奨される。

RBACについて

RBACは役割ベースのアクセス制御機能であり、誰がどのオブジェクトに対して、どのような操作が実行できるかを判断したもの。以下の3つの属性によって成り立っている。

  • サブジェクト・・・Kubernetes APIにアクセスしたいユーザーやプロセスの認証対象
  • リソース・・・操作対象のkubernetesオブジェクト。
  • 操作・・・リソースに対して実行できる一連の操作。CRUD。

RBACの認可の流れ

k8sでは「リソース」と「操作」を合わせたものを「Role」というオブジェクトで扱う。そして、Roleを作成した後にサブジェクトとRoleを「RoleBinding」に関連付ける。サブジェクトとして指定されたユーザーやサービスアカウントはそのRoleに記述された操作が許可される。