Kubernetesイングレスサポート
概要 クラウドネイティブのContrail® Networking™ は、Kubernetesと統合するためのコンテナネットワークインターフェイス(CNI)をサポートします。このトピックでは、クラウドネイティブのContrail NetworkingにおけるKubernetesイングレスサービスの実装の概要を説明します。このトピックには、検証済みの Kubernetes イングレス コントローラーとそのインストール手順の一覧も含まれています。
イングレス コントローラの概要
イングレスが正しく機能するには、Kubernetesイングレスコントローラーが必要です。イングレス コントローラーは、Kubernetes クラスターの外部からトラフィックを受信し、そのトラフィックをクラスター内のコンテナーにルーティングして負荷分散します。イングレスコントローラは、クラスタ内のサービスと外部サービス間のエグレストラフィックも管理します。コントローラは、サービス要件に応じて、トラフィックをコンテナに自動的にルーティングします。
イングレスコントローラは、イングレスリソースを展開します。イングレス リソースは、どのインバウンド トラフィック接続がどのサービス (ポッド) に到達するかを指定するルールで構成されます。イングレスリソースは、イングレスコントローラーと組み合わせて、レイヤー7トラフィックをクラスター内のコンテナにルーティングします。
NGINXイングレスリソースの例を次に示します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: apple-app-echo
namespace: ingress-nginx-test
spec:
selector:
matchLabels:
app: apple-echo
replicas: 1
template:
metadata:
labels:
app: apple-echo
spec:
containers:
- name: apple-echo
image: svl-artifactory.juniper.net/atom-docker/cn2/http-echo:latest
args:
- "-text=apple-echo"
イングレスリソースには、type: NodePortやtype: LoadBalancerなどのspecフィールドが含まれています。これらのサービスタイプは、コントローラのトラフィックルーティングおよび転送動作を決定します。たとえば、[type()] フィールドにNodePortを入力すると、コントロール プレーンはポートの範囲(デフォルトは 30000 〜 32767)のポートをサービスに割り当てます。
次の例を考えてみます。
apiVersion: v1
kind: Service
metadata:
name: envoy
namespace: projectcontour
annotations:
spec:
#externalTrafficPolicy: Local
ports:
- port: 80
name: http
protocol: TCP
nodePort: 30080
targetPort: 8080
- port: 443
name: https
protocol: TCP
targetPort: 8443
nodePort: 30443
selector:
app: envoy
type: NodePort
上記の例のハイライトは次のとおりです。
-
selector: このサービスが対象とするポッドのセットを決定するラベル セレクター。この例では、このサービスはラベルapp: envoyを持つ任意のポッドを選択します。 -
port: サービス ポート (80)。 -
targetPort: コンテナー内のアプリケーションによって使用される実際のポート (8080)。 -
nodePort: サービスが公開されているクラスター内の各ノードのホスト上のポート (30080)。
イングレスコントローラが異なれば、必要な設定も異なります。イングレスコントローラーのドキュメントで、 注釈、仕様、および構成情報を確認してください。
検証済みのイングレスコントローラ
クラウドネイティブのContrail Networkingは、多くのingressコントローラをサポートしています。クラウドネイティブのContrail Networkingで使用するために、以下の3つの一般的なサードパーティ製コントローラーを検証しました。
NGINXイングレスコントローラ
NGINXは、リバースプロキシ、ロードバランサー、IMAPまたはPOP3プロキシサーバーとしても機能するオープンソースのHTTPサーバーです。NGINX イングレス コントローラーは、 ConfigMap リソースを使用して NGINX 構成をデプロイする Kubernetes コントローラーです。エンドポイントのみの変更を除き、構成ファイルへの変更が発生した後に NGINX をリロードする必要があります。このリロードメカニズムは、 lua-nginxモジュールを搭載しています。NGINX を使用するには、Kubernetes v1.22 以降が必要です。Contrail Networkingリリース21.4以降、SDN(Software-Defined Networking)ソリューションとしてクラウドネイティブのContrail Networkingを使用している環境でNGINXイングレスコントローラーをサポートしています。
インストール手順については、NGINX イングレス コントローラー のインストール ガイド を参照してください。このガイドには、いくつかの異なる方法(Docker、 minikube、 Helm)を使用してNGINXをインストールする手順が含まれています。
HAProxy Ingressコントローラ
HAProxy イングレス コントローラーは、TCP および HTTP ルーティングと高可用性(HA)ロード バランシングを提供します。HAProxyは、 ランタイムAPI、 データプレーンAPI、 ヒットレスリロードなどの機能を提供します。これらの機能は、ユーザーがポッド、サービス、マイクロサービスを絶えずデプロイ、構成、終了する動的でトラフィックの多い環境で優れています。HAProxy イングレス コントローラー v0.13 には、Kubernetes v1.19 以降が必要です。
インストール手順については、HAProxy 入門 ガイドを参照してください。
HAProxy イングレスコントローラーをインストールして設定するには、 Helm を使用する必要があります。詳細については、「 Helm のインストール 」を参照してください。
コンターイングレスコントローラ
Contour イングレスコントローラーは、Envoy プロキシをリバースプロキシおよびロードバランサーとしてデプロイします。Envoyは、プロキシサービスと通信用のレイヤー7バスネットワークです。Envoy は、ライブラリではなく自己完結型のプロキシとしてデプロイされます。その結果、どのアプリケーションもEnvoyの負荷分散機能にアクセスできます。この実装は、Kubernetes クラスターなどの分散システムに適しています。Contourのその他の利点は次のとおりです。
-
Envoyの簡単なインストールと統合
-
マルチチームの Kubernetes クラスターでの安定したイングレス サポート
-
中断や接続の切断のない動的更新とイングレス構成。
Contour には Kubernetes 1.16 以降が必要です。Contour が正しく機能するには、クラスターでロールベースのアクセス制御 (RBAC) を有効にする必要があります。
Contrail Networkingリリース21.4以降、SDNソリューションとしてクラウドネイティブContrail Networkingを使用している環境では、Contourイングレスコントローラーがサポートされています。
Contourイングレスコントローラーのインストール方法については、 入門 ガイドを参照してください。このガイドには、 種類 または Docker を使用して Contour をインストールして構成する手順が含まれています。種類またはDockerをインストールした後にContourをインストールして、イングレスコントローラーを実行します。