2024.07.08
高性能踏み台 Teleportの紹介
こんにちは、次世代システム研究室のT.Iです。今回は高性能な踏み台、teleportについて紹介します。
Teleportについて
teleportとはGravitational社が開発を行っている高性能踏み台です。通常の踏み台と比較して大きく以下の点が優れています。
・Open IDによるログインが可能
・ユーザーの権限管理が可能
・操作ログの保存が可能
・複数のリソース(複数のk8sクラスターやサーバー)をまとめて管理可能
…etc
導入方法
ここではk8sへのteleportの導入方法について記載します。このとき、teleportでk8sクラスターを管理することを考えます。これを実現するためには以下の二つをk8sクラスターにインストールする必要があります。
・teleport proxy
→teleport agentや認証情報などを管理するアプリケーション
・teleport agent
→リソースを直接操作するアプリケーション
この時teleport proxyだけだとリソースの操作は行えないので注意してください。
これら二つはhelmでインストールを行います。helm chartに対応しているので以下でrepositoryに追加します
helm repo add teleport https://charts.releases.teleport.dev helm repo update
まずteleport proxyからです。teleport proxyは以下のアプリケーションをhelmでインストールします。
・teleport/teleport-proxy
valuesは本家referenceをもとに設定してください。
あとはvaluesを使用して以下のようにインストールします。
helm install teleport-cluster teleport/teleport-cluster \ --create-namespace \ --version 16.0.4 \ -f values.yaml \ -n teleport
インストール後に設定したhostにアクセスすることでDashboardにアクセスできるようになります。
次にteleport agentですが、以下のアプリケーションをhelmでインストールします。
・teleport/teleport-kube-agent
こちらのvaluesも本家referenceをもとに設定してください。ただしこちらをインストールする際正しくRoleを設定しないとリソースにアクセスできないため注意してください。(teleport/teleport-proxyのアプリケーション内にもRoleがありDashboardから設定できますが、それとは別でvaluesにRoleというkeyが存在します)
こちらも同様に設定したvaluesを使用してインストールします。
helm install teleport-agent teleport/teleport-kube-agent \ --create-namespace \ --version 16.0.4 \ -f values.yaml \ -n teleport
またこちらをインストール完了時にpod内にあるアプリケーションやdbなどk8s内のリソースも権限がある範囲のものは同時に操作できるようになります。
使用方法
まず最初にユーザーのセットアップを行います。ここでは詳しい説明は省きますが、こちらの本家referenceの後半を参考にユーザーを作成してください。設定が終わればteleport-proxyのdashboardからログインできるはずです。(この時ユーザーには正しくteleport-proxyのRoleを設定しないと操作ができなくなります)
ここまででユーザーまで用意できたのでローカルからteleportを通してk8sへアクセスすることが可能となります。アクセスする際には以下の二つのうちいずれかを使用します。
・tsh
→teleport用のコマンドラインツール
・teleport connect
→teleport用のUIツール(ここでは紹介しません)
tshを使用する際はこちらの本家referenceを参考にインストール、使用してください。
ここではtshを使用してkubectlを叩く方法を紹介します。他にも色々できますが、詳しくは本家referenceを参照してください。
基本的にはこちらの通りに操作するだけです。
まずk8sを操作するためのRoleを作成します。
kind: role metadata: name: kube-access version: v7 spec: allow: kubernetes_labels: '*': '*' kubernetes_resources: - kind: '*' namespace: '*' name: '*' verbs: ['*'] kubernetes_groups: - viewers deny: {}
こちらのroleをteleport proxyで設定します。(teleport-proxyのdashboardから設定できます)
次に以下のk8sのRABCリソースを作成します(kubectl等で設定します)
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: viewers-crb subjects: - kind: Group # Bind the group "viewers" to the kubernetes_groups assigned in the "kube-access" role name: viewers apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole # "view" is a default ClusterRole that grants read-only access to resources # See: https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles name: view apiGroup: rbac.authorization.k8s.io
その後、ログインするユーザーにroleをアタッチします。(こちらもteleport-proxyのdashboardから設定できます)
ここまで終わったら設定したユーザーでtshにログインします。
tsh login --proxy=${teleport-proxy-host} --auth=${auth-type} --user=${user-name} ${teleport-proxy-host} tsh kube login ${Kubernetes-cluster-name}
上記の簡単なコマンド操作でkubeconfigが自動生成され、teleportを介してkubectlを叩くことができます。ただし、kubectl proxyは使用できないので代わりにtsh proxyを使用してください。(tsh proxyについてはここでは紹介しません)
さいごに
次世代システム研究室では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。インフラ設計、構築経験者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ募集職種一覧からご応募をお願いします。 皆さんのご応募をお待ちしています。
グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。
Follow @GMO_RD