NGINX IngressのConfigMapまたはアノテーションを設定することで、NGINX Ingressを設定できます。 このトピックでは、NGINX Ingressで使用される一般的なアノテーションとConfigMapフィールドを設定する方法について説明します。
目次
リソース | 設定アイテム |
ConfigMap | |
注釈 | |
デフォルトのConfigMap設定
NGINX Ingressによって使用されるConfigMapの設定を変更するには、kubectl edit cm -n kube-system nginx-configuration
コマンドを実行します。 次のサンプルコードブロックは、ConfigMapのデフォルト設定を示しています。 詳細については、「公式ドキュメント」をご参照ください。
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-configuration
namespace: <Namespace> # Default value: kube-system.
labels:
app: ingress-nginx
data:
log-format-upstream: '$remote_addr - [$remote_addr] - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_length $request_time [$proxy_upstream_name] $upstream_addr $upstream_response_length $upstream_response_time $upstream_status $req_id $host [$proxy_alternative_upstream_name]'
proxy-body-size: 20m
proxy-connect-timeout: "10"
max-worker-connections: "65536"
enable-underscores-in-headers: "true"
reuse-port: "true"
worker-cpu-affinity: "auto"
server-tokens: "false"
ssl-redirect: "false"
allow-backend-server-header: "true"
ignore-invalid-headers: "true"
generate-request-id: "true"
upstream-keepalive-timeout: "900"
次の表に、上記のコードブロックのフィールドを示します。
フィールド | 説明 |
ログ形式アップストリーム | ログ形式。 このフィールドを変更する場合は、 |
proxy-body-size | クライアント要求本文の最大サイズ。 詳細は、「client_max_body_size」をご参照ください。 |
proxy-connect-timeout | プロキシサーバーとの接続を確立するためのタイムアウト時間。 このフィールドを設定する場合は、gRPC接続のgrpc_connect_timeoutフィールドも設定する必要があります。 最大値: 75。 単位は秒です。 値を设定するときは, 単位を指定する必要はありません。 |
max-worker-connections | ワーカープロセスによって開くことができる最大同時接続数。 値を0に設定した場合、 |
enable-underscores-in-headers | アンダースコア (_) を含むヘッダーをサポートするかどうかを指定します。 |
reuse-port | システムがワーカープロセス間で着信接続を分散できるように、ワーカープロセスごとに個別のリスニングソケットを作成します。 このフィールドは、 |
worker-cpu-affinity | ワーカープロセスを使用可能なCPUコアに自動的にバインドして、プロセスパフォーマンスを最適化します。 このフィールドは、高性能コンピューティングシナリオに適しています。 |
server-tokens | 応答でNGINX Serverヘッダーを送信し、エラーページにNGINXバージョンを表示します。 このフィールドを無効にするには、値を |
ssl-リダイレクト | サーバーにTLS証明書がある場合、HTTPSはグローバル設定によって強制的に使用され、301リダイレクトが実行されます。 |
allow-backend-server-header | バックエンドから遺伝的NGINX文字列の代わりにヘッダーサーバーを返すかどうかを指定します。 |
ignore-invalid-headers | 無効なヘッダーフィールドを無視するかどうかを指定します。 |
generate-request-id |
|
upstream-keepalive-timeout | アップストリームサーバーへのアイドル状態のキープアライブ接続のタイムアウト期間。 このフィールドは、NGINXの |
Ingressの注釈
NGINX Ingressコントローラーを使用する場合、ビジネス要件を満たすようにコントローラーの設定を変更できます。 NGINXの動作を制御するには、NGINX Ingressにアノテーションを追加します。 次の表は、一般的なNGINX Ingressアノテーションを示しています。 詳細については、「NGINX Ingress annotations」をご参照ください。
負荷分散アルゴリズム
NGINX Ingressは、バックエンドサービス間のトラフィック分散を最適化するためのさまざまな負荷分散アルゴリズムを提供します。 アプリケーションの機能と要件に基づいて、負荷分散アルゴリズムを選択できます。
注釈 | 説明 |
nginx.ingress.kubernetes.io /ロードバランス | バックエンドサービスの負荷分散アルゴリズムを指定します。 有効な値:
|
nginx.ingress.kubernetes.io/upstream-hash-by | 一貫したハッシュは、通常の線形ハッシュ空間の代わりに円形ハッシュ空間を使用する特別なハッシュアルゴリズムです。 ノードを追加または削除する場合、特定のルートを時計回りに移行するだけで済みます。 これにより、再ルーティングを減らし、負荷分散を実装できます。 |
次のサンプルYAMLファイルは、負荷分散のためにコンシステントハッシングを設定する方法の例を示しています。
Kubernetes 1.22以降を実行するクラスター
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-test
namespace: default
annotations:
nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri" # Use the Uniform Resource Identifier (URI) of the request for hashing.
nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri$host" # Use the URI and domain name of the request for hashing.
nginx.ingress.kubernetes.io/upstream-hash-by: "${request_uri}-text-value" # Use the URI of the request and a custom text value for hashing.
spec:
rules:
- host: ''
http:
paths:
- path: '/'
backend:
service:
name: <YOUR_SERVICE_NAME> # Replace the value with the actual Service name.
port:
number: <YOUR_SERVICE_PORT> # Replace the value with the actual Service port.
property:
ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
pathType: ImplementationSpecific
ingressClassName: nginx
1.22より前のバージョンのKubernetesを実行するクラスター
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-test
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri" # Use the URI of the request for hashing.
nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri$host" # Use the URI and domain name of the request for hashing.
nginx.ingress.kubernetes.io/upstream-hash-by: "${request_uri}-text-value" # Use the URI of the request and a custom text value for hashing.
spec:
rules:
- host: ''
http:
paths:
- path: '/'
backend:
serviceName: <YOUR_SERVICE_NAME> # Replace the value with the actual Service name.
servicePort: <YOUR_SERVICE_PORT> # Replace the value with the actual Service port.
クッキー親和性
次の表に、cookieベースのセッションアフィニティの設定に使用できるアノテーションを示します。
注釈 | 説明 |
nginx.ingress.kubernetes.io/affinity | affinityタイプ。 デフォルト値: |
nginx.ingress.kubernetes.io/affinity-mode | affinityモード。 有効な値:
デフォルト値: |
nginx.ingress.kubernetes.io/session-cookie-name | ハッシュキーとして使用されるcookie値。 |
nginx.ingress.kubernetes.io/session-cookie-path | cookieに設定されているパス。 デフォルト値: |
nginx.ingress.kubernetes.io/session-cookie-max-age | 生成されたcookieの有効期間。 単位は秒です。 |
nginx.ingress.kubernetes.io/session-cookie-expires | クッキーの作成からクッキーの有効期限までの経過時間。 |
次のサンプルYAMLファイルは、cookieベースのアフィニティを設定する方法の例を示しています。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-test
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
spec:
ingressClassName: nginx
rules:
- host: stickyingress.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: http-svc
port:
number: 80
リダイレクト
次の表に、NGINX Ingressのリダイレクトの設定に使用できるアノテーションを示します。
注釈 | 説明 |
nginx.ingress.kubernetes.io/ssl-リダイレクト | HTTPリクエストをHTTPSにリダイレクトします。 詳細については、「HTTP-to-HTTPSリダイレクト」をご参照ください。 |
nginx.ingress.kubernetes.io/force-ssl-redirect | HTTPリクエストをHTTPSにリダイレクトします。
デフォルト値: |
nginx.ingress.kubernetes.io/permanent-redirect | 永続的なリダイレクトの宛先URL。 宛先URLには、HTTPまたはHTTPSのスキームが含まれている必要があります。 |
nginx.ingress.kubernetes.io/permanent-redirect-code | 永続的なリダイレクトのHTTPステータスコード。 デフォルト値: 301 |
nginx.ingress.kubernetes.io /一時リダイレクト | 一時的なリダイレクトの宛先URL。 宛先URLには、HTTPまたはHTTPSのスキームが含まれている必要があります。 |
nginx.ingress.kubernetes.io/app-root | リダイレクトの宛先アプリケーションのルートパスを指定します。 このアノテーションは、 |
次のサンプルIngress設定では、永続的なリダイレクトの宛先URLを指定する方法を示します。 Ingressルールを実装すると、foo.com
へのリクエストはbar.com
にリダイレクトされます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-nginx
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/permanent-redirect: "https://bar.com"
spec:
ingressClassName: nginx
rules:
- host: foo.com
http:
paths:
- path: "/"
pathType: ImplementationSpecific
backend:
service:
name: httpbin
port:
number: 8000
書き換え
次の表に、NGINX Ingressの書き換えの設定に使用できるアノテーションを示します。
注釈 | 説明 |
nginx.ingress.kubernetes.io /書き換え対象 | 書き換え操作の宛先パスを指定します。 キャプチャグループがサポートされています。 Ingressの詳細については、「URLリダイレクトの設定」をご参照ください。 |
nginx.ingress.kubernetes.io/upstream-vhost | 書き換え先ホストを指定します。 |
次のサンプルIngress設定は、ホストの書き換えを設定する方法を示しています。 Ingressルールを実装すると、システムはリクエストのホスト名をs test.com/test. o example.com/test書き換えます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/upstream-vhost: "test.com"
name: demo
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ImplementationSpecific
スロットリング
サービスの安定性を確保するために、各クライアントIPアドレスから送信されるリクエストの頻度と同時実行性を制御するように調整ポリシーを設定できます。 次の表に、スロットリングの設定に使用できるアノテーションを示します。
注釈 | 説明 |
nginx.ingress.kubernetes.io/limit-connections | IPアドレスによって確立できる同時接続の最大数。 IPアドレスによって確立された同時接続の数が上限を超えた場合、503エラーが返されます。 |
nginx.ingress.kubernetes.io/limit-rate | 各接続を介して1秒あたりに送信できるデータの最大サイズ (KB単位) 。 値を0に設定すると、データ送信のレート制限は無効になります。 データ送信のレート制限を有効にするには、まずプロキシバッファリングを有効にする必要があります。 |
nginx.ingress.kubernetes.io/limit-whitelist | スロットリングから除外するクライアントIPアドレスの範囲。 値をCIDRブロックのコンマ区切りリストに設定します。 |
nginx.ingress.kubernetes.io/limit-rpm | 1分あたりにIPアドレスから受信できるリクエストの最大数。 バストレート制限は、レート制限に乗数を掛けたものに等しい。 デフォルトの乗数は5です。 1分あたりにIPアドレスから受信したリクエストの数が上限を超えた場合、limit-req-status-codeエラーが返されます。 デフォルトでは、503エラーが返されます。 |
nginx.ingress.kubernetes.io/limit-rps | 1秒間にIPアドレスから受信できるリクエストの最大数。 バストレート制限は、レート制限に乗数を掛けたものに等しい。 デフォルトの乗数は5です。 IPアドレスから受信した1秒あたりのリクエスト数が上限を超えた場合、limit-req-status-codeエラーが返されます。 デフォルトでは、503エラーが返されます。 |
nginx.ingress.kubernetes.io/limit-burst-multiplier | バースト要求レート制限を計算するために使用される乗数。 既定値:5 このアノテーションを使用して、カスタム乗数を指定できます。 |
次のサンプルIngress設定では、スロットリングの設定方法を示します。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-nginx
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/limit-rate: 100K
nginx.ingress.kubernetes.io/limit-whitelist: 10.1.10.100
nginx.ingress.kubernetes.io/limit-rps: 1
nginx.ingress.kubernetes.io/limit-rpm: 30
spec:
rules:
- host: iphone.example.com
http:
paths:
- path:
backend:
serviceName: iphone-backend-svc
servicePort: 80
フォールバック
サービスの高可用性と安定性を確保するために、NGINX Ingressはディザスタリカバリ (フォールバック) 設定を提供しており、ノードの使用不能や特定のエラーなどの問題を解決できます。 次の表に、ディザスタリカバリの設定に使用できるアノテーションを示します。
注釈 | 説明 |
nginx.ingress.kubernetes.io/default-backend | フォールバックサービス。 Ingressルールで定義されたサービスで使用できるノードがない場合、リクエストは自動的にフォールバックサービスに転送されます。 NGINX Ingressコントローラーのグローバル設定は、ACKコンソールの [アドオン] ページで設定できます。 |
nginx.ingress.kubernetes.io/custom-http-errors | このアノテーションは、 重要 リクエストがフォールバックサービスに転送されると、リクエストのパスはスラッシュ (/) に書き換えられます。 動作は、ingress-nginxで実装されている動作と一致しています。 このアノテーションは、ConfigMapでcustom-http-errorsフィールドを設定するのと同じ方法で設定できます。 このアノテーションは、NGINXの 異なるIngressのバックエンドサービスに対して異なるエラーコードを指定できます。 グローバル構成とこのアノテーションで |
カナリアリリース
カナリアリリースと青緑色展開は、アプリケーションのシームレスなアップグレードと高可用性を確保するために広く使用されています。 次の表に、サービスリリースのさまざまな要件を満たすように柔軟なトラフィック制御を構成するために使用できる注釈を示します。 詳細については、「NGINX Ingressコントローラーを使用したカナリアリリースとブルーグリーンリリースの実装」をご参照ください。
注釈 | 説明 |
nginx.ingress.kubernetes.io /カナリア | カナリアリリース機能を有効にするかどうかを指定します。 |
nginx.ingress.kubernetes.io/canary-by-header | トラフィック分割に使用されるリクエストヘッダーキーを指定します。 |
nginx.ingress.kubernetes.io/canary-by-header-value | トラフィック分割に使用されるリクエストヘッダー値を指定します。 リクエストヘッダー値の完全一致がサポートされています。 |
nginx.ingress.kubernetes.io/canary-by-header-pattern | トラフィック分割に使用されるリクエストヘッダー値を指定します。 リクエストヘッダー値では、正規表現の一致がサポートされています。 |
nginx.ingress.kubernetes.io/canary-by-cookie | トラフィック分割に使用されるリクエストcookieキーを指定します。 |
nginx.ingress.kubernetes.io/canary-weight | トラフィック分割に使用される重みを指定します。 |
nginx.ingress.kubernetes.io/canary-weight-total | 合計の重みを指定します。 |
タイムアウト
次の表では、NGINX Ingressのタイムアウトを設定するために使用できるアノテーションについて説明します。これには、特定のリソースのグローバル設定とカスタムタイムアウト設定が含まれます。 適切なタイムアウト設定により、接続パフォーマンスと信頼性を最適化できます。
グローバルタイムアウトの設定
kubectl edit cm -n kube-system nginx-configuration
コマンドを実行して、グローバルタイムアウト設定の次のフィールドを設定します。設定オプション
説明
デフォルト値
proxy-connect-timeout
プロキシサーバーとの接続を確立するためのタイムアウト時間を設定します。 一般に、この値は75sを超えることはできない。
5s
proxy-read-timeout
プロキシサーバーから応答を読み取るためのタイムアウト時間を設定します。 このタイムアウト期間は、応答全体の送信ではなく、2つの連続する読み出し動作の間に適用される。
60s
proxy-send-timeout
プロキシサーバーにリクエストを送信するためのタイムアウト時間を設定します。 このタイムアウト期間は、要求全体の送信ではなく、2つの連続する書き込み動作の間に適用される。
60s
proxy-stream-next-upstream-timeout
次のサーバーに接続を渡すために許可される時間を制限します。 値を0に設定した場合、制限は課されません。
600s
proxy-stream-timeout
クライアントまたはプロキシサーバー接続での2つの連続した読み取りまたは書き込み操作間のタイムアウト期間を設定します。 その期間内にデータが送信されない場合、接続は閉じられる。
600s
upstream-keepalive-timeout
上流サーバーとのアイドル接続を開いたままにするためのタイムアウト期間を設定します。
オープンソース版: 60s
ACKエディション: 900s
worker-shutdown-timeout
グレースフルシャットダウンのタイムアウト期間を設定します。
240s
proxy-protocol-header-timeout
プロキシプロトコルヘッダーを受信するためのタイムアウト期間を設定します。 デフォルト値は、トランスポート層セキュリティ (TLS) パススルーハンドラが接続の切断を無期限に待機するのを防ぎます。
5s
ssl-session-timeout
セッションキャッシュのSSLセッションパラメーターの有効期間を設定します。 有効期限は作成時刻に左右されます。 各セッションキャッシュは約0.25 MBのスペースを占有します。
10m
client-body-timeout
クライアント要求本文を読み取るためのタイムアウト期間を設定します。
60s
client-header-timeout
クライアント要求ヘッダーを読み取るためのタイムアウト期間を設定します。
60s
特定のリソースのカスタムタイムアウト設定
次の表に、特定のリソースのタイムアウト設定を構成するために使用できるアノテーションを示します。
注釈
説明
nginx.ingress.kubernetes.io/proxy-connect-timeout
プロキシサーバーとの接続を確立するためのタイムアウト時間を設定します。
nginx.ingress.kubernetes.io/proxy-send-timeout
プロキシサーバーにデータを送信するためのタイムアウト期間を設定します。
nginx.ingress.kubernetes.io/proxy-read-timeout
プロキシサーバーからデータを読み取るためのタイムアウト時間を設定します。
nginx.ingress.kubernetes.io/proxy-request-buffering
リクエストバッファリング機能を有効にするかどうかを指定します。 有効な値:
on
: リクエストのバッファリングを有効にします。 リクエストバッファリングが有効になった後、リクエストデータは完全に受信された後にのみバックエンドワークロードに転送されます。 HTTP/1.1チャンク化されたリクエストは、この設定の対象ではなく、常にバッファリングされます。off
: リクエストのバッファリングを無効にします。 リクエストバッファリングが無効になった後、データ送信中にエラーが発生した場合、ワークロードは再試行のために選択されません。
CORS
NGINX Ingressコントローラーにクロスオリジンリソース共有 (CORS) を設定した後、指定したリソースにオリジン間でアクセスできるようにすることができます。 詳細については、「NGINX IngressでのCORSの設定」をご参照ください。
注釈 | 説明 |
nginx.ingress.kubernetes.io/enable-cors | CORSを有効にするかどうかを指定します。 |
nginx.ingress.kubernetes.io/cors-allow-origin | CORSに許可されるサードパーティのサイトを指定します。 |
nginx.ingress.kubernetes.io/cors-allow-methods | CORSに許可されるリクエストメソッドを指定します。 許可されているリクエストメソッドには、GET、POST、およびPUTが含まれます。 |
nginx.ingress.kubernetes.io/cors-allow-headers | CORSに許可されるリクエストヘッダーを指定します。 |
nginx.ingress.kubernetes.io/cors-expose-headers | ブラウザーに公開される許可された応答ヘッダーを指定します。 |
nginx.ingress.kubernetes.io/cors-allow-credentials | 資格情報をCORSリクエストで保持するかどうかを指定します。 |
nginx.ingress.kubernetes.io/cors-max-age | 事前チェック結果がキャッシュされる最大期間を指定します。 |
再試行ポリシー
次の表に、再試行ポリシーの構成に使用できる注釈を示します。 再試行により、アプリケーションの可用性と耐障害性が向上します。
注釈 | 説明 |
nginx.ingress.kubernetes.io/proxy-next-upstream-tries | リトライ条件を満たした場合のリトライ回数を設定します。 デフォルト値:3 |
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout | リクエストの再試行のタイムアウト期間を指定します。 単位は秒です。 デフォルトでは、タイムアウト期間は設定されていません。 |
nginx.ingress.kubernetes.io/proxy-next-upstream | 再試行ポリシーまたは再試行条件を設定します。 複数のアイテムをスペースで区切ります。 たとえば、
|
IPアドレスベースのアクセス制御
次の表に、NGINX IngressのIPホワイトリストとブラックリストの設定に使用できるアノテーションを示します。
注釈 | 説明 |
nginx.ingress.kubernetes.io/whitelist-source-range | IPホワイトリスト。 IPアドレスとCIDRブロックがサポートされています。 IPアドレスまたはCIDRブロックはコンマ (,) で区切ります。 |
nginx.ingress.kubernetes.io/denylist-source-range | IPブラックリスト。 IPアドレスとCIDRブロックがサポートされています。 IPアドレスまたはCIDRブロックはコンマ (,) で区切ります。 |
次のサンプルIngress設定は、IPホワイトリストを設定する方法を示しています。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-nginx
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/whitelist-source-range: 10.1.10.2
spec:
rules:
- host: iphone.exmaple.com
http:
paths:
- path:
backend:
serviceName: iphone-example-svc
servicePort: 80
グローバル設定を設定するには、kubectl edit cm -n kube-system nginx-configuration
コマンドを実行し、whitelist-source-range
フィールドを変更します。
トラフィックミラーリング
次の表に、トラフィックミラーリングの設定に使用できるアノテーションを示します。 トラフィックミラーリングは、本番環境のサービスを中断することなく潜在的なリスクを検出し、アプリケーションの安定性を向上させます。 詳細については、「Ingressコントローラーを使用したネットワークトラフィックのミラーリング」をご参照ください。
注釈 | 説明 |
nginx.ingress.kubernetes.io /ミラーターゲット | 送信先 IP アドレスです。 サービスIPアドレスまたは外部IPアドレスを指定できます。 たとえば、 |
nginx.ingress.kubernetes.io/mirror-request-body | リクエスト本文をミラーリングするかどうかを指定します。 |
nginx.ingress.kubernetes.io /ミラーホスト | トラフィックのミラーリングに使用されるホスト情報。 |
セキュリティ保護
セキュリティ保護を設定して、クライアントとゲートウェイ間の通信を保護できます。 次の表に、通信の暗号化に使用できるアノテーションを示します。 詳細については、「NGINX Ingressコントローラーの暗号化」をご参照ください。
クライアントとゲートウェイ間の暗号化通信
次の表に、クライアントとゲートウェイ間の通信の暗号化に使用できるアノテーションを示します。
注釈
スコープ
説明
nginx.ingress.kubernetes.io/ssl-cipher
ドメイン名
TLS暗号スイートを指定します。 カンマ (,) で区切られた複数のTLS暗号スイートを指定できます。 このパラメーターは、TLSハンドシェイク中に1.0から1.2までのTLSバージョンが使用されている場合にのみ有効です。 デフォルトの暗号スイート:
ECDHE-ECDSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES128-SHA
ECDHE-RSA-AES128-SHA
AES128-GCM-SHA256
AES128-SHA
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-ECDSA-AES256-SHA
ECDHE-RSA-AES256-SHA
AES256-GCM-SHA384
AES256-SHA
nginx.ingress.kubernetes.io/auth-tls-secret
ドメイン名
相互TLS (mTLS) ハンドシェイク中にクライアントが提供する証明書を検証するためにゲートウェイが使用する認証局 (CA) 証明書を指定します。 この注釈は、ゲートウェイがクライアントのIDを検証する必要があるシナリオに適しています。
対応するシークレットには、
ca.crt
という名前のファイルを含める必要があります。ca.crt
ファイルには完全なCAチェーンが含まれています。ゲートウェイとバックエンドサービス間の暗号化通信
次の表に、バックエンドサービスとゲートウェイ間の通信の暗号化に使用できるアノテーションを示します。
注釈
スコープ
説明
nginx.ingress.kubernetes.io/proxy-ssl-secret
サービス
ゲートウェイで使用されるクライアント証明書を指定します。 クライアント証明書は、ゲートウェイを認証するためにバックエンドサービスによって使用されます。
指定された証明書は、プライバシー強化メール (PEM) 形式である必要があります。
シークレットには、次のファイルを含める必要があります。
tls.crt
: クライアント証明書。tls.key
: クライアント証明書の秘密鍵。ca.crt
: プロキシHTTPSサーバーの認証に使用される信頼できるCA証明書。
値は
"namespace/secretName"
形式でなければなりません。
nginx.ingress.kubernetes.io/proxy-ssl-name
サービス
TLSハンドシェイク中に使用されるサーバー名表示 (SNI) を指定します。
nginx.ingress.kubernetes.io/proxy-ssl-server-name
サービス
TLSハンドシェイク中に使用されるSNIを有効にするか無効にするかを指定します。
セキュリティ認証
次の表に、許可されたユーザーのみがアプリケーションにアクセスできるように基本認証を構成するために使用できる注釈を示します。
注釈 | スコープ | 説明 |
nginx.ingress.kubernetes.io/auth-type | Ingress | 認証タイプ。 値を |
nginx.ingress.kubernetes.io/auth-secret | Ingress | シークレットの名前を指定します。 名前はnamespace/secretName形式である必要があります。 シークレット名には、Ingressルールで定義されたルートにアクセスするために使用されるユーザー名とパスワードが含まれます。 |
nginx.ingress.kubernetes.io/auth-secret-type | Ingress | Secretコンテンツの形式を指定します。 有効な値:
|
nginx.ingress.kubernetes.io/auth-realm | Ingress | 認証レルムを指定します。 ユーザ名およびパスワードは、認証領域で共有される。 |
手順:
htpasswd
コマンドラインツールを使用して、パスワードファイルを生成します。htpasswd -c auth joker
パスワードファイルを表示します。
cat auth # Expected output: joker:$apr1$R.G4krs/$hh0mX8xe4A3lYKMjvlVs1/
パスワードファイルに基づいてシークレットを作成します。
kubectl create secret generic basic-auth --from-file=auth
Ingress設定で基本認証を有効にします。 例:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-nginx annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/auth-type: basic nginx.ingress.kubernetes.io/auth-secret: basic-auth spec: rules: - host: iphone.example.com http: paths: - path: backend: serviceName: iphone-backend-svc servicePort: 80