Ingress( NGINX )からTraefikへの移行について IBM Cloud

IBM Cloud Kubernetes Service アップストリームプロジェクトが終了したため、 Ingress( NGINX ) から移行しています。 Traefikは、 IBM が今後サポートするIngressコントローラーです。

移行期間中は、Ingressのコントローラーが両方とも利用可能であり、Traefikをテストし、ご自身のペースで移行を進めることができます。

このトピックでは、Ingress- NGINX とTraefikの主な設定上の違いを比較し、移行に関する指針を示します。

Ingress- NGINX とTraefikの比較 IBM Cloud

以下の表は、Ingress- NGINX とTraefikの主な違いを比較したものです。

Ingress、 NGINX、Traefikのプロパティに関する概要比較
この比較表には、行見出しと列見出しがあります。 行の見出しは比較対象のプロパティを示し、列の見出しはIngress、 NGINX、Traefikを示しています。 この表を用いて、2つのインジェス・コントローラー間の大まかな違いを比較してください。
Ingress- NGINX Traefik
IBM- 提供されているデフォルトのIngressクラス public-iks-k8s-nginx パブリック用は、 private-iks-k8s-nginx はプライベート用です。 public-iks-traefik パブリック用は、 private-iks-traefik はプライベート用です。
バージョン体系 0.X.X_XXXX_iks および 1.X.X_XXXX_iks Traefik バージョン 3 以降では: 3.X.X_XXXX_iks
処理済みリソース Ingress のみ Ingress (オプションで Ingress- NGINX との互換性および Traefik CRD に対応)
IBM- 展開済みのサービスアカウント名 ibm-k8s-ingress ibm-traefik-ingress

次の表は、Ingress( NGINX )とTraefikにおける一般的な機能の設定方法を比較したものです。

Ingress- NGINX とTraefikの設定機能の比較
この表には行および列の見出しがあります。 行の見出しは設定機能を示しており、列の見出しは、Ingress( NGINX )およびTraefikにおいてその機能をどのように設定するかを説明しています。
構成 Ingress- NGINX Traefik
App ID 認証 Ingressリソースに nginx.ingress.kubernetes.io/auth-url および関連するスニペット注釈を追加します。 Ingress に関するドキュメント( NGINX )を参照してください Traefikの ForwardAuth ミドルウェアCRDを作成し、 traefik.ingress.kubernetes.io/router.middlewares アノテーションを介して適用します。 Traefikのドキュメントを参照してください
クライアントのリクエスト本文の最大サイズ nginx.ingress.kubernetes.io/proxy-body-size アノテーションを使用してください。 Ingress に関するドキュメント( NGINX )を参照してください Traefikの Buffering ミドルウェアCRDを作成し、それをIngressリソースに適用します。 Traefikのドキュメントを参照してください
クライアント応答データのバッファリング nginx.ingress.kubernetes.io/proxy-buffering アノテーションを使用してください。 Ingress に関するドキュメント( NGINX )を参照してください Traefikの Buffering ミドルウェアCRDを作成し、それをIngressリソースに適用します。 Traefikのドキュメントを参照してください
接続および読み取りのタイムアウト nginx.ingress.kubernetes.io/proxy-connect-timeout および proxy-read-timeout のアノテーションを使用してください。 Ingress に関するドキュメント( NGINX )を参照してください ibm-ingress-deploy-config ( ConfigMap, )で読み取り/書き込み/アイドル時のタイムアウトを設定し、バックエンドの転送タイムアウトには ServersTransport CRDを使用します。 Traefikのドキュメントを参照してください
カスタム・エラー・アクション ibm-k8s-controller-config の「 custom-http-errors 」フィールドを設定してください。 ConfigMap。 Ingress に関するドキュメント( NGINX )を参照してください Traefikの Errors ミドルウェアCRDを作成し、それをIngressリソースに適用します。 Traefikのドキュメントを参照してください
リクエストヘッダーのカスタマイズ ibm-k8s-controller-config の「 proxy-set-headers 」フィールドを設定してください。 ConfigMap。 Ingress に関するドキュメント( NGINX )を参照してください Traefikの Headers ミドルウェアCRDを作成し、それをIngressリソースに適用します。 Traefikのドキュメントを参照してください
レスポンスヘッダーのカスタマイズ nginx.ingress.kubernetes.io/configuration-snippet アノテーションを使用してください。 Ingress に関するドキュメント( NGINX )を参照してください Traefikの Headers ミドルウェアCRDを作成し、それをIngressリソースに適用します。 Traefikのドキュメントを参照してください
HTTP HTTPS へのリダイレクト ibm-k8s-controller-config ( ConfigMap )で ssl-redirect を設定するか、 nginx.ingress.kubernetes.io/ssl-redirect アノテーションを使用してください。 Ingress に関するドキュメント( NGINX )を参照してください ibm-ingress-deploy-config の「 httpsRedirect 」フィールドを設定してください。 ConfigMap。 Traefikのドキュメントを参照してください
HTTP Strict Transport Security (hsts) ibm-k8s-controller-config の「 hsts 」フィールドを設定してください。 ConfigMap。 Ingress に関するドキュメント( NGINX )を参照してください stsSeconds および関連フィールドを含むTraefikの Headers ミドルウェアCRDを作成し、それをIngressリソースに適用します。 Traefikのドキュメントを参照してください
URIパスの照合(正規表現) nginx.ingress.kubernetes.io/use-regex アノテーションを使用してください。 Ingress に関するドキュメント( NGINX )を参照してください traefik.ingress.kubernetes.io/router.pathmatcher アノテーションを使用してください。 Traefikのドキュメントを参照してください
相互 TLS 認証 Ingressリソースに nginx.ingress.kubernetes.io/auth-tls-* アノテーションを指定してください。 Ingress に関するドキュメント( NGINX )を参照してください TraefikのTLSOption CRDを作成し、 traefik.ingress.kubernetes.io/router.tls.options アノテーションを介して適用します。 Traefikのドキュメントを参照してください
再試行 / 次のアップストリーム nginx.ingress.kubernetes.io/proxy-next-upstream および関連するアノテーションを使用してください。 Ingress に関するドキュメント( NGINX )を参照してください Traefikの Retry ミドルウェアCRDを作成し、それをIngressリソースに適用します。 Traefikのドキュメントを参照してください
速度制限 Ingressリソースに nginx.ingress.kubernetes.io/limit-* アノテーションを指定してください。 Ingress に関するドキュメント( NGINX )を参照してください Traefikの RateLimit ミドルウェアCRDを作成し、それをIngressリソースに適用します。 Traefikのドキュメントを参照してください
パス書き換え nginx.ingress.kubernetes.io/rewrite-target アノテーションを使用してください。 Ingress に関するドキュメント( NGINX )を参照してください Traefikの ReplacePath または ReplacePathRegex ミドルウェアCRDを作成し、それをIngressリソースに適用します。 Traefikのドキュメントを参照してください
セッションアフィニティ(スティッキークッキー) nginx.ingress.kubernetes.io/affinity および関連するアノテーションを使用してください。 Ingress に関するドキュメント( NGINX )を参照してください Ingressリソースに、Traefikサービスの sticky cookie アノテーションを直接指定します。 Traefikのドキュメントを参照してください
TLS の上流( SSL のサービス) nginx.ingress.kubernetes.io/backend-protocol および proxy-ssl-* のアノテーションを使用してください。 Ingress に関するドキュメント( NGINX )を参照してください rootCAs フィールドを含むTraefikの ServersTransport CRDを作成し、それをバックエンドのServiceに適用します。 Traefikのドキュメントを参照してください
SSL プロトコルと暗号方式 ibm-k8s-controller-config ConfigMap 内の「 ssl-protocols 」および「 ssl-ciphers 」フィールドを設定してください。 Ingress に関するドキュメント( NGINX )を参照してください minVersionmaxVersioncipherSuites の各フィールドを持つ Traefik TLSOption CRD を作成します。 Traefikのドキュメントを参照してください

MiddlewareTLSOptionServersTransport など、Traefik CRD に依存する機能がある場合は、CRD 処理が有効になっていることを確認してください。 CRD処理はデフォルトで有効になっています。 CRDの処理を設定するには、 Ingressでのカスタム設定の作成 ConfigMap の「 ibm-ingress-deploy-config ConfigMap 」にある「 processTraefikCRDs 」フィールドを参照してください。

以下の表は、Ingress- NGINX およびTraefikがサポートする、カスタマイズ可能なデプロイメントパラメータの一覧です。

Ingress( NGINX )およびTraefikがサポートする、カスタマイズ可能なデプロイメントパラメータ
この表には行および列の見出しがあります。 行の見出しはデプロイメントパラメータを示しており、列の見出しは、Ingress、 NGINX、Traefikの各々がそのパラメータをサポートしているか、あるいは代替手段を提供しているかを示しています。
Ingress- NGINX Traefik
replicas サポート対象 サポート対象
ingressClass サポート対象 サポート対象
httpPort, httpsPort サポート対象 サポート対象
tcpServicesConfig サポート対象 適用外 IngressRouteTCP CRD を使用してください。
enableSslPassthrough サポート対象 適用外 この設定を明示的に有効にする必要はありません。
defaultCertificate サポート対象 適用外 defaultCertificate でTLSStore CRD を使用します。
defaultBackendService サポート対象 適用外 グローバルデフォルトのバックエンド・イングレスを使用します。
deepInspect サポート対象 適用外
defaultConfig サポート対象 適用外
enableAnnotationValidation サポート対象 適用外 Traefikは、アノテーションによる設定の注入を受けやすいという性質はありません。
enableIngressValidation サポート対象 適用外
logLevel 詳細度として、0~5の数値で指定できます。 以下の値を持つ文字列としてサポートされています: TRACEDEBUGINFOWARNERRORFATALPANIC
ingressProvider 適用外 サポート対象
processTraefikCRDs 適用外 サポート対象
traefikIngressNginxAllowExternalNameServices 適用外 サポート対象
traefikCRDAllowCrossNamespace 適用外 サポート対象
traefikCRDAllowExternalNameServices 適用外 サポート対象
httpReadTimeout, httpsReadTimeout 適用外 ibm-k8s-controller-config ( ConfigMap )から設定を行ってください サポート対象
httpWriteTimeout, httpsWriteTimeout 適用外 ibm-k8s-controller-config ( ConfigMap )から設定を行ってください サポート対象
httpIdleTimeout, httpsIdleTimeout 適用外 ibm-k8s-controller-config ( ConfigMap )から設定を行ってください サポート対象
httpsRedirect 適用外 ibm-k8s-controller-config 、 ConfigMap、またはアノテーションを使用して設定します サポート対象
tolerations サポート対象 サポート対象

移行時に考慮すべき事項

以下の IBM Cloud のメカニズムは、特定のシナリオにおいてサービスの停止を防ぐのに役立ちます。

クラシック・クラスターにおけるDNSの処理

従来のクラスターでは、パブリック ALB インスタンスを有効または無効にすると、それらの ALB の IP アドレスが自動的にクラスターのデフォルトドメインに追加されます。

異なる種類のALBを有効にした場合(TraefikとIngressを併用する場合 — NGINX )、DNSレコードは追加されません。 これにより、単一のドメインの背後で異なるALBタイプが混在するという望ましくない状況を防ぎ、デバッグが困難な問題の発生を回避できます。 この混合状態が続いている間は、新しいIPアドレスは登録されません。 IPアドレスの削除機能は、これまで通り動作しています。

異なるタイプの最後のインスタンスが無効化されると(Traefik または Ingress のいずれか — NGINX )、残りの ALB は自動的に再登録され、すべてのパブリック ALB インスタンスがクラスタのデフォルトサブドメインの背後に登録されるという、望ましい状態が復元されます。

デフォルトのIngressクラスの処理

デフォルトのIngressクラスは、ALBの有効化または無効化イベントが発生するたびに調整されます。 デフォルトのIngressクラスが IBM のデフォルト設定のままにされ、設定が行われていない場合、自動的に更新されます。

クラスタで有効になっているALBがTraefikベースのもののみの場合、以前のデフォルトが public-iks-k8s-nginx だったか private-iks-k8s-nginx だったかによって、 public-iks-traefik または private-iks-traefik がデフォルトとして設定されます。 同様に、クラスター上で Ingress( NGINX )ベースの ALB のみが有効になっている場合、デフォルトの Ingress クラスは Ingress( NGINX )のものに戻されます。

カスタム・イングレス・クラスは、決して自動的にデフォルトに設定されることはありません。

Traefik の設定やカスタマイズに関する詳細については、「 Traefik における Ingress について 」を参照してください。