2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OCIのOKEのOCI Native Ingress ControllerでIngressにNSGをアタッチする

Last updated at Posted at 2024-11-23

はじめに

OCIのOKEのOCI Native Ingress Controllerで、Ingress(ロードバランサー)にネットワーク・セキュリティ・グループ(以下NSG)をアタッチする方法を紹介します。

私は、セキュリティリストを極力使わずに、NSGでロードバランサーの通信制御を設定したかったです。公式もドキュメントのどこかでそれを推奨していました。しかし、NSGをアタッチする方法がすぐにわからなかったので記事にしました。

注意点

2024年11月23日時点で、以下の理由で公式リポジトリのドキュメントから一度消えている内容です。 詳細は後述します。そのため動作は保証しません!(ただし、私は期待通りに動きました)

Reverting doc update made to GettingStarted.md in #99, for features that are not yet released as part of NIC v1.3.9

また、OKEやOCI Native Ingress Controllerについては説明しないので、以下のチュートリアルや公式ドキュメントを読みつつ設定してください。

OKEやkubectlの基本的な部分が参考になります。

ドキュメント

やり方

IngressClassのmanifestファイルに metadata.annotations.ingressclass.kubernetes.io/is-default-class を追加して、アタッチしたいNSGのOCIDをカンマ区切りで記載するだけです。

以下サンプルのmanifestファイルです。関連リソースも作成しています。

# 公式ドキュメント
# https://docs.oracle.com/ja-jp/iaas/Content/ContEng/Tasks/contengsettingupnativeingresscontroller-createresources.htm
# リポジトリのドキュメント
# https://github.com/oracle/oci-native-ingress-controller/blob/main/GettingStarted.md

# ほぼドキュメント通りに記載しています。

apiVersion: "ingress.oraclecloud.com/v1beta1"
kind: IngressClassParameters
metadata:
  name: native-ic-params
spec:
  compartmentId: "<xxxxx>" # 各自の環境に合わせてください
  subnetId: "<xxxxx>" # 各自の環境に合わせてください
  loadBalancerName: "native-ic-lb"
  isPrivate: false
  maxBandwidthMbps: 100 # サンプルなのでかなり低い値を設定しています
  minBandwidthMbps: 10 # サンプルなのでかなり低い値を設定しています

# 本記事の要点
---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: native-ic-ingress-class
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"
    # NSGの設定方法は2024/11/23時点で、このPRでしか確認できない
    # https://github.com/oracle/oci-native-ingress-controller/pull/99/files
    # 複数の場合は、リストではなくカンマ区切りで指定する
    oci-native-ingress.oraclecloud.com/network-security-group-ids: "<nsg_id_1>, <nsg_id_2>"
spec:
  controller: oci.oraclecloud.com/native-ingress-controller
  parameters:
    scope: Namespace
    namespace: default
    apiGroup: ingress.oraclecloud.com
    kind: ingressclassparameters
    name: native-ic-params

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: native-ic-ingress
  annotations:
    oci-native-ingress.oraclecloud.com/healthcheck-protocol: "HTTP"
    oci-native-ingress.oraclecloud.com/healthcheck-port: "80"
    oci-native-ingress.oraclecloud.com/healthcheck-path: "/"
spec:
  ingressClassName: native-ic-ingress-class
  rules:
    - host: "xxx.jp" # ドメインがあるなら設定する
      http:
        paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: nginx-service # リクエストを流すserviceを指定する
                port:
                  number: 80

# リクエスト確認用のnginxのserviceとdeployment
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: ClusterIP

このようなコードで kubectl apply -f path/to/xxx.yaml で変更を適用して少し待てば、InngressのロードバランサーのNSGに、このコードだと nsg_id_1nsg_id_2 のNSGがアタッチされています。

これで、セキュリティリストを使わずに、ロードバランサーの通信制御をすることができます!

もちろん、Pod通信のNSGのインバウンドで、ロードバランサーにアタッチしたNSGを許可しておけば、Pod通信はロードバランサーからのリクエストしか受け付けなくなります(やっってると思いますが、NodeやAPIエンドポイントからのインバウンドは許可しておいてください)。

この設定を知るまでに至った経緯

「はじめに」に書いたとおり、NSGで通信制御をしたかったです。

公式ドキュメントやリポジトリのドキュメントを読んだりAIに聞いてもすぐわからず、検索したら以下のissueが出てきました。

上記issueの最後に以下のPRのリンクがあったので、PRのdiffを見たらドキュメントにNSGを設定する方法が追記されていました。

が、mainブランチのドキュメントには、追記された内容がありません。

調べると、以下のPRでドキュメントの追記部分は消えていました(実装は残ったまま)。

Reverting doc update made to GettingStarted.md in #99, for features that are not yet released as part of NIC v1.3.9

PRにはこう書かれていたので、ドキュメントの追記が早まったのだと思います。

ただし、私が試した限りはNSGのアタッチは問題なく機能しています。

おわり

ニーズは高そうなので、OCIには早くNICのバージョンアップ?して、公式リポジトリのドキュメントに記載してほしい内容ですね。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?