OCIのOKEのポッドのNSGはOCI CLIだと変更できる

はじめに

こんにちは、技術部の内藤です。

タイトルそのままですが、OKEでは、記事執筆の2025年6月30日時点で、作成したノードプールのポッドのNSGを変更することはできませんが、CLIだと変更できます。コマンドの引数が複雑かつドキュメント見てもよくわからないので、詳細を説明します。

なぜか変更できないポッドのNSG

画像のように、少なくとも私の環境だとグレーアウトされており、ポッドのNSGを確認・変更ができません。

NSGがグレーアウトされている

サブネットにはなにも出ない、、、

サブネットにはなにも出てこない

私が初めてOKEを使った2024年の10月からこうなっており、普通にバグな気がするのですが、なかなか直してくれませんね、、、
それとも、仕様なのでしょうか?

NSGの変更方法1 - ノードプールを作り直す

変更方法と言っていいかあやしいですが、ノードプール作成時には問題なくNSGを設定できるので、ノードプールを作り直すことでNSGを変更可能です。

これはいまいちなので、まともな方法を紹介します。

NSGの変更方法2 - OCI CLIを使う

OCI CLIを使うと、ノードプールを作り直すことなく、ポッドのNSGを変更できます。

まず、現在のサブネットとNSGのIDを確認してみましょう。

oci ce node-pool get --node-pool-id xxx

出力結果の例

{
// 省略
    "node-config-details": {
      // 省略
      "node-pool-pod-network-option-details": {
        "cni-type": "OCI_VCN_IP_NATIVE",
        "max-pods-per-node": null,
        "pod-nsg-ids": [
          "value1",
          "value2",
          "value3"
        ],
        "pod-subnet-ids": [
          "value"
        ]
// 省略
}

次に、引数の値を記述したjsonファイルを用意するために、どのようなkey,valueが必要かを、以下のコマンドで確認します。

oci ce node-pool update --generate-full-command-json-input

出力結果の例

{
  // 省略
  "nodePoolId": "string",
  // 省略
  "podNsgIds": [
    "string",
    "string"
  ],
  "podSubnetIds": [
    "string",
    "string"
  ],
  //
}

podSubnetIds も必須なので載せています。


仮にOCIDがvalue1,2,3のNSGがアタッチされているとして、value4のOCIDのNSGをアタッチするとして、以下のjsonファイルを params.json として作成します。
※ファイル名はなんでも構いません

{
  "nodePoolId": "value",
  "podSubnetIds": [
    "value"
  ],
  "podNsgIds": [
    "value1",
    "value2",
    "value3",
    "value4"
  ]
}

最後に、のコマンドでポッドのNSGを更新します。 --from-json で、ファイルを指定できます。確認がある場合は、yを入力してEnterです。

oci --profile old ce node-pool update --from-json params.json
WARNING: Updates to initial-node-labels and subnet-ids and node-config-details and node-metadata and node-source-details and node-shape-config and freeform-tags and defined-tags and node-eviction-node-pool-settings and node-pool-cycling-details will replace any existing values. Are you sure you want to continue? [y/N]: y
{
  "opc-work-request-id": "ocid1.clustersworkrequest.xxxxx"
}

これでもう一度getコマンドで確認すると、ポッドのNSGが追加されています。

oci ce node-pool get --node-pool-id xxx
{
// 省略
    "node-config-details": {
      // 省略
      "node-pool-pod-network-option-details": {
        "cni-type": "OCI_VCN_IP_NATIVE",
        "max-pods-per-node": null,
        "pod-nsg-ids": [
          "value1",
          "value2",
          "value3",
          "value4"
        ],
        "pod-subnet-ids": [
          "value"
        ]
// 省略
}

おわりに

OCIのコンソールでポッドのNSGが変更できないのは不便ですが、OCI CLIを使うことでjsonファイルの作成の手間はありつつも変更できます。

このバグ?仕様?が早く改善されることを願います。