Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) にローカルからトークンベース認証で kubectl get pod するまでの道のり
最近無料枠の大きいOracle Cloud Infrastructure(以下OCI)でKubernetesを運用する機運が高まったので、とりあえず kubectl get pod
しようとしたら詰まった。
結論としては
という感じだったので、同じハマりをしないようメモっておく。
前提
必須条件
- Oracle Cloud Infrastructureアカウントがある
- ↑のアカウントに権限のあるユーザがいる (CLIで操作できるユーザが存在する)
- アクセス可能なパブリックエンドポイントを持つOKEクラスタがある
トークンベース認証を行う
公式ドキュメントがあるので、その通りに認証を行う。
oci session authenticate
ブラウザがある場合は上コマンドを打つとCLIでリージョン選択後、ブラウザで認証画面が出てくる。
基本東京リージョンを使用するので、ap-tokyo-1の番号を選べば良いと思う。
ブラウザでログインしたあとは、CLIのprofile名を入力する。おそらく初回だと自動的にDEFAULTになるので、特に何も出ないで終わるケースもある。
うまくいくと ~/.oci/config
に以下のような設定が追加されるはず。
[DEFAULT] fingerprint=<keyのfingerprint> key_file=/Users/ayu/.oci/sessions/DEFAULT/oci_api_key.pem tenancy=<テナンシID> region=<リージョン名(ap-tokyo-1等)> security_token_file=/Users/ayu/.oci/sessions/DEFAULT/token
ない場合は公式ドキュメントにどうすれば良いか書いているので以下を参照。
CLIが毎回トークンベースで認証を行うようにする
さて、ここからが本題。
OCI CLIは、トークンベースで認証を行っても、自動的にその認証情報を使ってくれない。
なので、以下のどちらかをしないといけない。
- コマンドのオプションとして、
--auth security_token
をつける - 環境変数として
OCI_CLI_AUTH=security_token
を設定する
前者でも後者でも問題ないが、以下の理由から前者で対応することにする。
しかし毎回コマンドオプションをつけるのはだるいので、自動的にこのオプションがつくように設定する。
OCI CLIには、CLI構成ファイルというオプションやエイリアスの設定ができる機能があるので、これを使う。
まず、設定ファイルを作る。
oci setup oci-cli-rc
次に、 ~/.oci/oci_cli_rc
に以下の設定を追加する。
compartment-idやtenancyというのは聞き馴染みがないかもしれないが、GCPのproject_idとproject_root_idに近い概念で、tenancyがプロジェクトのトップ、そこから木構造のようにコンパートメントを切って様々なプロジェクトを管理する。
OCIはコンパートメントの指定がないと基本的にリソースを絞れないので、ほとんどのコマンドでコンパートメントIDを要求してくる。コンソールでも大体左側のサイドバーで今何のコンパートメントを見ているか表示される。
[DEFAULT] auth = security_token compartment-id = <OKEクラスタがあるコンパートメントID。tenancyにある場合はテナンシID>
この設定をすることで、oci cliを使うコマンドが以下のように暗黙的に変換される。
# 未設定 oci foo bar # 設定済み oci foo bar --auth security_token --compartment-id <コンパートメントID>
これでOCI CLI周りの準備は完了。
OKEクラスタに接続する
OKEクラスタへの接続は別途設定が必要なので、OKEクラスタのアクセス情報を取得する。
OKEのクラスタを作成すると、左上側のボタンに クラスタへのアクセス
ボタンがあるので、モーダルの ローカル・アクセス
ボタンを押し、パブリックエンドポイントを使うときの設定のコマンドをコピペして実行すれば、kubectl が使用できる状態になる。
あとは kubectl get pod
ができるはず。
エラーが出る場合、どこかの認証が誤っている(特にOCI CLIの構成ファイル ~/.oci/oci_cli_rc
の設定が漏れている)可能性が高いので、再度確認してみる。