※これはIntroducing Oracle Cloud Native Ingress controller for Kubernetesの翻訳です

Kubernetes の世界では、Ingressコントローラは受信トラフィックをクラスタ内の適切なサービスにルーティングできるようにする重要なコンポーネントです。 これは、HTTP および HTTPS トラフィックのエントリ ポイントとして機能し、サービスを外部に公開できるようにします。 Oracle の Kubernetes は、NGINX Ingress コントローラや Traefik などのいくつかのIngress コントローラをサポートしていますが、Oracle Cloud Infrastructure (OCI) サービスと統合されたコントローラはありませんでした。

Kubernetes 用の新しい OCI Native Ingress コントローラのリリースを発表できることを嬉しく思います。 新しいNative Ingress コントローラを使用すると、外部コントローラに依存せずに、Kubernetes 内で直接 Ingress リソースを簡単かつ効率的に管理できるようになりました。 この最先端のソリューションは、開発者や企業がCloud Nativeアプリケーションの真の力を活用できるように設計されており、OCI エコシステムを活用したシームレスな接続と高度なルーティング機能を実現します。

Oracle Cloud Native Ingressコントローラとは

Oracle Cloud Native Ingressコントローラは、Cloud Nativeアプリケーションへの受信ネットワーク・トラフィックの管理をシンプルにする、堅牢でスケーラブルなソリューションです。 ルーティングと負荷分散のための集中コントロール・プレーンを提供し、これまでより簡単にサービスを確実かつ効率的に提供することが出来るようになります。高度にカスタマイズできるように設計されており、トランスポート層セキュリティ (TLS) ターミネーション、pod readinessゲート、ホスト、パスベースのルーティングなど、最新のIngress機能をすべてサポートしています。 また、オーバーヘッドと遅延を最小限に抑えながら、高いパフォーマンスを発揮するように構築されています。

Native Ingress コントローラは、ルーターとして機能する OCI ロードバランサー・サービスとシームレスに統合され、OCI 証明書は TLS/SSL 通信の確立に使用される証明書を管理します。

利点

運用をシンプルにしてコストを削減

Native Ingress コントローラを使用すると、Kubernetes クラスタ内の複数のアプリケーション間で OCI ロードバランサーを共有することで、操作をシンプルにし、コストを節約できます。 Oracle Kubernetesクラスタ内で複数のサービスを実行するための単一のロードバランサーを使用し、パスベースのルーティングやホストベースのルーティングなどの高度なルーティング・ルールを構成したり、サービスを単一のエントリ・ポイントに統合して低コストで一元化した構成を実現したりできます。

OCI ロードバランサーによる即時対応、柔軟性、高可用性

Oracle ロードバランサーは、リージョン内の Oracle Compute インスタンスなどの複数のバックエンドにわたって、アプリケーション層 (レイヤー 7) で受信トラフィックの負荷分散を行うポピュラーな Oracle サービスです。Native Ingress コントローラは、Oracle Container Engine for Kubernetes (OKE) クラスタの外部にある別個のエンティティであるルーターとして機能するロードバランサーとシームレスに統合されます。

OCI フレキシブル・ロードバランサーを使用すると、顧客は HTTP(s) リクエストをpod全体に分散したり、フォールトドメイン(FD)、可用性ドメイン(AD)、またはリージョン間でトラフィックを自動的にルーティングしたりすることができ、あらゆるアプリケーションやデータソースに高可用性とフォールト・トレランスを実現できます。 OCI フレキシブル・ロードバランサーを使用すると、固定帯域幅ロードバランサーのシェイプや、一般的なトラフィック・パターンのみに基づくスケーリングに制限されなくなります。 カスタムの最小帯域幅とオプションの最大帯域幅を選択できます。 最小帯域幅は常に利用可能であり、ワークロードに即座に対応できます。 コストを制御する必要がある場合は、オプションの最大帯域幅設定を使用して、予期せぬピーク時でも帯域幅を制限できます。受信トラフィックパターンに基づいて、トラフィックが増加するにつれて、利用可能な帯域幅が最小値からスケールアップします。

証明書の自動管理

Native Ingress コントローラは OCI Certificatesとも統合されており、ロードバランサーで HTTPs トラフィックを有効にするために使用される TLS 証明書を作成管理できます。 作成後、Native Ingress コントローラは自動的にロードバランサーに関連付けられ、Certificatesサービスを利用して証明書を自動的にローテーションします。

シンプルな管理と監視

最適なパフォーマンスを維持し、問題に迅速に対処するには、アプリケーションのデプロイの効率的な管理と監視が不可欠です。Native Ingressコントローラは、独自の監視およびロギング機能を備えたOracle Cloud ロードバランサーと統合されており、アプリケーション・トラフィック、パフォーマンス・メトリックおよびログを包括的に可視化します。 一元化された OCI ロードバランサーの監視および管理機能により、オペレータは潜在的なボトルネックや異常を迅速に特定して解決し、スムーズで中断のないユーザー体験を確保できます。

workerノード外からの専用ルーティングリソース

オープンソースおよび3rd partyの Ingress モデルでは、ルーティング・コンポーネントはworkerノード内で実行されるpodであり、アプリケーション専用のリソースの一部を消費します。例えばすべての TLS/SSL 接続は、Kubernetes クラスタ内で実行されているIngressコントローラpodで終了します。 HTTPS トラフィックが大量にある場合、トラフィックの暗号化と復号化にかなりの量のコンピューティングが浪費されます。Native Ingress コントローラを使用すると、この処理はロードバランサー・レベルで実行され、workerノードのリソースが節約されます。

余分なホップを回避することで応答を高速化

以前は、Oracle Kubernetes は OCI ロードバランサーをプロビジョニングし、workerノードをバックエンドとして保持し、最終的にposにルーティングしていました。Native Ingress コントローラを使用すると、podは OCI ロードバランサーへのバックエンドとして直接機能し、内部サービスの IP や kube-proxyに依存するのではなく、余分なホップを回避できます。

Oracle Cloud Native Ingressコントローラはどのように機能するのか

Native Ingress コントローラの使用を開始するには、 Kubernetes リソースとしてそれをデプロイし、通常どおり Ingress リソースを作成します。 当社のコントローラは、ルーティングと負荷分散を処理する OCI ロードバランサーを自動的に作成し、トラフィックが効率的かつ安全にアプリケーションにルーティングされるようにします。

前提条件と必要な Identity and Access Management (IAM) ポリシーを構成します。

 

OKE クラスタを作成するか、既存のクラスタを使用してIngressコントローラをデプロイします。 Helm と YAML を使用してデプロイできます。 詳細についてはドキュメントを参照してください。namespaceについて言及する必要はありません。Ingress コントローラpodは、明示的に指定されていない限り、native-ingress-controller-system のnamespaceで実行されます。

 


$ helm install oci-native-ingress-controller helm/oci-native-ingress-controller
NAME: oci-native-ingress-controller
LAST DEPLOYED: Mon May 15 22:40:18 2023
NAMESPACE: native-ingress-controller-system
STATUS: deployed
REVISION: 1
TEST SUITE: None

$ kubectl get pods -n native-ingress-controller-system -o wide -w

NAME                                             READY   STATUS    RESTARTS   AGE   IP            NODE          NOMINATED NODE   READINESS GATES

oci-native-ingress-controller-6887f9cb9f-m5rg7   1/1     Running   0          10s   10.0.10.148   10.0.10.197   <none>           <none>

 

 

2. Kubernetes API を使用して複数の Kubernetes オブジェクトを作成します。 1 つ目の IngressClassparameters は、compartmentId、SubnetId、LoadbalancerName、および lb シェイプの詳細に関する詳細を含むカスタム リソースです。 IngressClassparameters は、OCI ロードバランサー作成の詳細を定義するのに役立ちます。

 


apiVersion: "ingress.oraclecloud.com/v1beta1"
kind: IngressClassParameters
metadata:
     name: ingressparms-prod
     namespace: native -ingress-controller-system
spec:
     loadBalancerName: "native-ic-lb"
     isPrivate: false
     maxBandwidthMbps: 400
     minBandwidthMbps: 100

 

 

3. Ingress クラスを作成します。これにより、IngressClassparameters カスタムリソースで指定されたシェイプを持つ OCI ロードバランサーも作成されます。 Kubernetes クラスタ内で複数の Ingress コントローラ実装が実行されている場合、Ingress クラスインスタンスは、Ingress リソースをコントローラにマッピングするのに役立ちます。 また Ingress リソースにそのような要件がある場合、さまざまなシェイプのロードバランサーを作成するのにも役立ちます。

 


apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
     name: default -ingress-class
     annotations:
       ingressclass.kubernetes.io/is-default -class :  "true"
spec:
    controller: oci.oraclecloud.com/native -ingress-controller
     parameters:
       scope: Namespace
       namespace: native -ingress-controller-system
       apiGroup: ingress.oraclecloud.com
       kind: ingressclassparameters
       name: ingressparms-prod

 

 

4. 受信リソースを作成してルーティングルールを指定します。 Native Ingress コントローラは、API サーバからの Ingress の変更を監視します。 Ingressリソースが作成または更新されたことを検出すると、OCIリソースの作成および更新操作を開始します。 Ingress は、クラスタの外部からクラスタ内のサービスに HTTP および HTTPS ルートを公開します。 トラフィック・ルーティングは、入力リソースで定義されたルールによって制御されます。 次の手順では、すべてのリクエストをパス「/app1」からサービス B にリダイレクトするルートをロードバランサーに作成します。

 


apiVersion: networking.k8s.io/v1
kind: Ingress
     metadata:
        name: ingress-tls
        annotations:
          oci-native -ingress.oraclecloud.com/protocol: HTTP   
          oci-native -ingress.oraclecloud.com/policy: "ROUND_ROBIN"
          oci-native -ingress.oraclecloud.com/healthcheck-protocol:  "HTTP"     
          oci-native -ingress.oraclecloud.com/healthcheck-port:  "9090"  
          oci-native -ingress.oraclecloud.com/healthcheck-interval-milliseconds:  "10000" 
          oci-native -ingress.oraclecloud.com/healthcheck-timeout-milliseconds:  "3000" 
          oci-native -ingress.oraclecloud.com/healthcheck-retries:  "3"
          oci-native -ingress.oraclecloud.com/healthcheck-return -code:  "200"  
          oci-native -ingress.oraclecloud.com/healthcheck-response-regex:  ""  
          oci-native -ingress.oraclecloud.com/healthcheck-path:  "/health"  
          oci-native -ingress.oraclecloud.com/healthcheck-force-plaintext:  "true" 
    spec:
        defaultBackend:
          service:
            name: default -backend
            port:
              number: 8080
        tls:
        - hosts:
            - foo.bar.com
          secretName: demo-tls-secret
        rules:
        - host:  "foo.bar.com"
          http:
            paths:
            - pathType: Prefix
              path:  "/app1"
              backend:
                service:
                  name: Service B
                  port:
                    number: 443

 

 

  1. Ingressリソースで指定されたバックエンドごとに、OCIロードバランサーのバックエンド・セットを作成します。
  2. バックエンドサービスとして指定されたポートごとにリスナーを作成します。
  3. Ingressリソースで指定されたパスごとにルーティングルールを作成し、特定のパスへのトラフィックが、作成された正しいバックエンド・セットにルーティングされるようにします。
  4. OCI 証明書と CA バンドルを作成し、それらをリスナーとバックエンド・セットに関連付けます。 ロードバランサーで TLS を有効にする場合は、事前に Kubernetes シークレット?demo-tls-secret を作成します。 詳細な手順については、ドキュメントを参照してください。
  5. デフォルトのバックエンド・セットを作成します。 どのルールにも一致しない入力トラフィックは、すべてのトラフィックを単一のデフォルト・バックエンドに送信します。 サービスを作成し、それをデフォルトの動作として Ingress に渡します。
  6. サービス・バックエンド・セットでヘルス チェックを構成します。

 

まとめ

Oracle Native Ingress コントローラの導入は、Oracle のCloud Native製品の進化における重要なマイルストーンを示します。 この強力なコントローラは、アプリケーションのデプロイメントを合理化し、スケーラビリティを強化し、OCI サービスとシームレスに統合することにより、開発者と運用担当者が堅牢でパフォーマンスの高いアプリケーションを効率的に提供できるようにします。 セキュリティ、コンプライアンス、シンプルな管理に重点を置いた Oracle Native Ingress コントローラは、Cloud Native時代に成功できるようにする包括的なソリューションを提供するという Oracle の取り組みを強化します。

OCI ネイティブ Ingress コントローラは、実稼働対応のオープンソース プロジェクトです。 Oracle Native Ingress コントローラと、それがアプリケーションのデプロイメントをどのように変革するかについて詳しくはドキュメントを参照してください。OracleのCloud Nativeエコシステムの力を活用し、アプリケーションの可能性を最大限に引き出します。 参加したい場合は、次のリソースを参照してください。