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 | |
|---|---|---|
| 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 |
|---|---|---|
| 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 )を参照してください。 |
minVersion、 maxVersion、 cipherSuites の各フィールドを持つ Traefik TLSOption CRD を作成します。 Traefikのドキュメントを参照してください。 |
Middleware、 TLSOption、 ServersTransport など、Traefik CRD に依存する機能がある場合は、CRD 処理が有効になっていることを確認してください。 CRD処理はデフォルトで有効になっています。 CRDの処理を設定するには、 Ingressでのカスタム設定の作成 ConfigMap の「 ibm-ingress-deploy-config ConfigMap 」にある「 processTraefikCRDs 」フィールドを参照してください。
以下の表は、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の数値で指定できます。 | 以下の値を持つ文字列としてサポートされています: TRACE、 DEBUG、 INFO、 WARN、 ERROR、 FATAL、 PANIC。 |
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 について 」を参照してください。