ApigConfig は、APIG Controller が提供する CRD であり、APIG ゲートウェイインスタンスのライフサイクル管理、Ingress リスナーのオプション設定、および IP アクセス制御、ログ収集、トレーシングといったグローバル設定を定義します。
ApigConfig の概要
設定
ApigConfig は APIG Controller が提供する CRD で、APIG ゲートウェイインスタンスのライフサイクルとグローバル設定を管理します。
各 ApigConfig は 1 つの APIG ゲートウェイインスタンスに対応します。複数の APIG ゲートウェイインスタンスを使用するには、複数の ApigConfig リソースを作成する必要があります。
再利用シナリオを除き、ApigConfig を削除すると、対応する APIG ゲートウェイインスタンスも削除されます。
CRD (ApigConfig) を使用して作成された APIG ゲートウェイインスタンスの場合、API、ルート、証明書などのビジネス設定は CRD で管理してください。スケーリングなどの操作には APIG コンソールを使用できます。CRD で作成されたインスタンスのビジネス設定をコンソールで変更しないでください。CRD の同期により変更が上書きされ、設定の競合が発生する可能性があります。
以下は、完全な ApigConfig 設定の例です。
apiVersion: apig.alibabacloud.com/v1alpha1
kind: ApigConfig
metadata:
name: apig-ingress
spec:
name: apig-ingress
common:
pay:
payType: POSTPAY
instance:
spec: apigw.small.x1
network:
vSwitches:
- "vsw-1"
- "vsw-2"
networkType: Internet
securityGroupType: enterprise
global:
tls:
enableHardwareAcceleration: true
ipAccessControl:
whitelist:
- 1.1.XX.XX
- 2.2.XX.XX
monitor:
logging:
sls:
reuseProject: "xxx" # デフォルトプロジェクトを使用する場合は空白のままにします。
tracing:
openTelemetry:
sampleRate: "100"
ingress:
local:
ingressClass: apig
watchNamespace: "" # 空の文字列 ("") は、すべての namespace の Ingress リソースを示します。
|
パラメータ |
説明 |
デフォルト |
|
|
ゲートウェイ名。 |
apig-ingress |
|
|
課金方法。 従量課金のみがサポートされています。指定がない場合、これがデフォルト値になります。 |
POSTPAY |
|
|
ゲートウェイインスタンスタイプ。 有効な値:
|
apigw.small.x1 |
|
|
プライマリおよびスタンバイの vSwitch (この順で指定)。 1 つまたは 2 つの vSwitch を指定します。指定されていない場合、APIG Controller Pod が実行されているノードの vSwitch が継承されます。 |
なし |
|
|
ゲートウェイのネットワークアクセシビリティ。 有効な値:
|
Internet |
|
|
セキュリティグループタイプ。 有効な値:
|
normal |
|
|
TLS ハードウェアアクセラレーションを有効にするかどうかを指定します。 この機能により、HTTPS トラフィックのパフォーマンスが大幅に向上します。 |
true |
|
|
グローバル IP ホワイトリスト。 |
未設定 |
|
|
グローバル IP ブラックリスト。 |
未設定 |
|
|
Simple Log Service (SLS) のログ収集を有効にするかどうかを指定します。 この機能を有効にするには、APIG Controller に必要な SLS 権限を付与してください。 |
false |
|
|
アクセスログを保存する SLS プロジェクト。 有効な値:
|
"" |
|
|
トレーシング分析 (x-trace) のサンプルレート。 |
0 |
|
|
OpenTelemetry トレーシングを有効または無効にします。 |
デフォルトでは無効です。 |
|
|
OpenTelemetry トレーシングのサンプルレート。 |
"100" |
|
|
IngressClass に基づいて、APIG ゲートウェイインスタンスが処理する Ingress リソースを決定します。 有効な値:
説明
この設定の優先度は、IngressClass を介した ApigConfig の関連付けよりも低くなります。 |
未設定 |
|
|
ゲートウェイが Ingress リソースを監視する namespace。 有効な値:
|
"" |
ステータス
ApigConfig リソースを作成した後、kubectl get ApigConfig コマンドを実行してステータスを確認します。リソースは、Pending > Running > Listening の順に状態が遷移します。
-
Pending:APIG ゲートウェイインスタンスを作成中です。このプロセスには約 3 分かかります。 -
Running:APIG ゲートウェイインスタンスの作成が完了し、実行中です。 -
Listening:APIG ゲートウェイインスタンスが実行中で、クラスタ内の Ingress リソースをリッスンしています。 -
Failed:APIG ゲートウェイインスタンスが無効な状態です。原因については、StatusフィールドのMessageを確認してください。
タグ
ApigConfig を介して作成または再利用された APIG ゲートウェイインスタンスには、リソースタグが付けられます。タグ情報は、APIG コンソールの [基本情報] セクションで確認できます。
APIG コンソールでこれらのタグを編集しないでください。編集すると、ゲートウェイインスタンスが中断される可能性があります。
|
タグ |
説明 |
|
ack.aliyun.com |
APIG ゲートウェイが Container Service for Kubernetes (ACK) クラスタの Ingress トラフィックを管理していることを示します。 |
|
ingress.k8s.alibaba/ApigConfig |
APIG ゲートウェイインスタンスを ApigConfig に関連付けます。 |
|
kubernetes.reused.by.user |
APIG ゲートウェイインスタンスが再利用されているかどうかを示します。再利用されたインスタンスは、関連付けられた ApigConfig が削除されても削除されません。 |
APIG ゲートウェイインスタンスの作成
-
ApigConfig を設定します。
以下の例では、apig-ingress という名前の APIG ゲートウェイインスタンスをインスタンスタイプ apigw.small.x1 で作成します。必要に応じて、その他の ApigConfig 設定を変更してください。
apiVersion: apig.alibabacloud.com/v1alpha1 kind: ApigConfig metadata: name: apig-ingress spec: name: apig-ingress common: instance: spec: apigw.small.x1 -
Container Service for Kubernetes (ACK) クラスターで、IngressClass を作成し、spec.parameters を使用して ApigConfig に関連付けます。これにより、クラスター内に Ingress プロセッサーが宣言されます。
設定が完了すると、リンクされた APIG ゲートウェイインスタンスは、この IngressClass に関連付けられたすべての Ingress を処理します。
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: apig spec: controller: apig.alibabacloud.com/ingress parameters: apiGroup: apig.alibabacloud.com kind: ApigConfig name: apig-ingress
既存の APIG ゲートウェイインスタンスの再利用
既存の APIG ゲートウェイインスタンスを再利用するには、ApigConfig の spec.id フィールドにそのインスタンス ID (例:gw-xxx) を指定します。spec.override を使用して、ApigConfig の設定で既存のインスタンス設定を上書きするかどうかを制御します。
以下の例では、既存の APIG ゲートウェイインスタンスを再利用します。ApigConfig は、インスタンスをクラスターに関連付け、apig IngressClass を持つ Ingress リソースを処理するように設定します。
-
以下の設定では、
spec.overrideがfalseに設定されているため、既存の APIG ゲートウェイの Ingress リスナーオプションとグローバル設定は上書きされません。既存のゲートウェイインスタンスがコンテナクラスターに関連付けられていない場合、自動的にクラスターに関連付けられ、その Ingress リスナーオプションは、ingressClassがspec.ingress.local.ingressClass(この例ではapig) であるコンテナクラスター内の Ingress リソースをリッスンするように設定されます。ゲートウェイインスタンスがすでにコンテナクラスターに関連付けられている場合、既存の Ingress リスナーオプションは上書きされません。 -
既存の APIG ゲートウェイの Ingress リスナーオプションとグローバル設定を上書きするには、
spec.overrideを有効にする前に、ApigConfig 内のゲートウェイパラメーター (Ingress リスナーオプション、ハードウェアアクセラレーション、グローバル許可リストとブロックリスト、および可観測性) が正しく設定されていることを確認してください。ApigConfig でこれらの設定が指定されていないままspec.overrideを有効にすると、元のゲートウェイパラメーター (Ingress リスナーオプション、ハードウェアアクセラレーション、グローバル許可リストとブロックリスト、および可観測性) が上書きされ、トラフィックに影響を与える可能性があります。
apiVersion: apig.alibabacloud.com/v1alpha1
kind: ApigConfig
metadata:
name: reuse
spec:
id: gw-xxxx
override: false
ingress:
local:
ingressClass: apig
|
パラメーター |
説明 |
|
|
再利用する APIG ゲートウェイインスタンスの ID。ID は |
|
|
ApigConfig の設定に基づいて、再利用する APIG ゲートウェイインスタンスの設定を上書きするかどうかを指定します。
|
APIG ゲートウェイインスタンスの削除
ApigConfig を削除すると、対応する APIG ゲートウェイインスタンスも削除されます。ただし、再利用されたインスタンスは除きます。
以下の表に、削除ポリシーを示します。
|
課金方法 |
APIG Controller で作成 |
再利用コンソールゲートウェイ |
|
従量課金 |
ApigConfig を削除すると、ゲートウェイインスタンスは自動的に削除されます。 |
ApigConfig を削除しても、ゲートウェイインスタンスは保持されます。 |
ApigConfig を削除するには、次のコマンドを実行します。
kubectl delete ApigConfig your-config-name
グローバル IP アクセス制御の設定
IP ホワイトリストの設定
グローバル IP ホワイトリストを設定して、特定のソース IP からのみ APIG Ingress へのアクセスを許可します。
以下の例では、ソース IP 1.1.XX.XX と CIDR ブロック 2.0.XX.XX/8 からのアクセスのみを許可します。
apiVersion: apig.alibabacloud.com/v1alpha1
kind: ApigConfig
metadata:
name: apig-ingress
spec:
...
global:
ipAccessControl:
whitelist:
- 1.1.XX.XX
- 2.0.XX.XX/8
...
IP ブラックリストの設定
グローバルかつインスタンスレベルの IP ブラックリストを設定して、特定のソース IP からのアクセスを拒否します。
以下の例では、ソース IP 1.1.XX.XX と CIDR ブロック 2.0.XX.XX/8 からのリクエストを拒否します。
apiVersion: apig.alibabacloud.com/v1alpha1
kind: ApigConfig
metadata:
name: apig-ingress
spec:
...
global:
ipAccessControl:
blacklist:
- 1.1.XX.XX
- 2.0.XX.XX/8
...
SLS ロギングの有効化
ログ収集を有効にする前に、APIG Controller に必要な SLS 権限があることを確認してください。
-
ACK マネージドクラスターの場合は、APIG Controller への権限の付与をご参照ください。
以下の例では、demo という名前の SLS プロジェクトにアクセスログを配信するようにゲートウェイを設定します。
apiVersion: apig.alibabacloud.com/v1alpha1
kind: ApigConfig
metadata:
name: apig-ingress
spec:
...
monitor:
logging:
sls:
# reuseProject を設定して SLS ロギングを有効にします。デフォルトプロジェクトを使用する場合は、このフィールドを空白のままにします。
reuseProject: "demo"
...
OpenTelemetry トレーシングの有効化
ゲートウェイで OpenTelemetry トレーシングを設定して、本番環境の問題を診断するためのエンドツーエンドのトレーシングシステムを構築します。
次の例では、サンプリングレート (sampleRate) を 100 に設定して OpenTelemetry トレーシングを構成します。
apiVersion: apig.alibabacloud.com/v1alpha1
kind: ApigConfig
metadata:
name: apig-ingress
spec:
...
monitor:
tracing:
openTelemetry:
sampleRate: "100"
...
追加設定
APIG Ingress gateway インスタンスは、以下の追加設定をサポートしています。
これらの設定を適用するには、Cloud-native API Gateway コンソールにアクセスします。ページでゲートウェイインスタンスを選択し、左側メニューで [パラメーター設定] をクリックします。
|
パラメーター |
タイプ |
説明 |
|
|
Bool |
有効にすると、トレース目的でリクエストヘッダーにリクエスト ID が生成されます。 |
|
|
Bool |
リクエストとレスポンスの Gzip 圧縮を有効にすることで、ゲートウェイのトラフィックを削減しますが、CPU 消費量は増加します。 |
|
|
Bool |
有効にすると、リクエストパス内の冗長な |
|
|
Int |
単一接続のバッファーサイズ。スループットとゲートウェイのメモリ使用量に影響します。 有効な範囲:[0, 2147483647]。 |
|
|
Int |
ゲートウェイの前段にある信頼できるプロキシの数。これは、ゲートウェイが 値の範囲:[0, 10]。単位:個。 |
|
|
Int |
クライアントが HTTP/2 を使用する場合の、単一接続での同時ストリームの最大数。 値の範囲:[0, 2147483647]。単位:個。 |
|
|
Int |
ゲートウェイとクライアント間でネゴシエートされる HTTP/2 値の範囲:[65535, 2147483647]。単位:バイト。 |
|
|
Int |
ゲートウェイとクライアント間でネゴシエートされる HTTP/2 の初期接続レベルのウィンドウサイズ。 値の範囲:[65535, 2147483647]。単位:バイト。 |
|
|
Bool |
HTTP/3 プロトコルをサポートするかどうかを指定します。 HTTP/3 は TLS ハードウェアアクセラレーションと互換性がありません。HTTP/3 を有効にする前に、ハードウェアアクセラレーションを無効にする必要があります。 |
|
|
String |
URI パスに %2F、%2f、%5C、%5c などのエスケープ文字が含まれているリクエストに対するアクションを決定します。デフォルトは 有効な値: |
|
|
List<String> |
圧縮を有効にした後に使用する圧縮アルゴリズム。このパラメーターを設定した際、 |
|
|
Bool |
PROXY プロトコルを有効にするかどうかを指定します。Ingress トラフィックが Network Load Balancer (NLB) を経由してルーティングされる場合、このオプションを有効にすると、リアルクライアント IP アドレスを取得できます。有効にしても、PROXY プロトコル以外のリクエストには影響しません。 |
|
|
Bool |
自己管理型の認可サービス用。有効にすると、認可ルールの変更によってアクティブな接続が中断されないため、WebSocket やその他のリアルタイムシナリオに適しています。 |
|
|
Int |
クライアントに返される 値の範囲:[0, 600]。単位:秒。 |
|
|
Int |
アップグレードや再起動などでゲートウェイが接続を閉じる際の、アクティブな WebSocket 接続の猶予期間。 値の範囲:[20, 900]。単位:秒。 |
|
|
Bool |
ハードウェアアクセラレーションによる Gzip 圧縮を有効にします。ソフトウェア Gzip と比較して、CPU 消費量を抑えながら高いパフォーマンスを実現します。このオプションは、サポートされていないリージョン、または購入時に Gzip ハードウェアアクセラレーションが指定されていない場合は使用できません。有効にすると、 |
|
|
Bool |
サービスソースを追加するときに、指定されたラベルに基づいて Ingress、Service、Pod リソースをフィルタリングします。逆フィルタリングもサポートされています。 |
よくある質問
APIG Ingress を削除して再作成した後にエンドポイントが空の場合はどうすればよいですか?
Ingress を削除し、同じ YAML ファイルを使用して再作成したにもかかわらず、しばらく待ってもエンドポイントが空のままの場合、通常は ApigConfig で Ingress リスナーのオプションが設定されていません。その結果、APIG ゲートウェイインスタンスが Ingress リソースをウォッチしません。次の手順で問題を切り分けてください:
-
ApigConfig で
spec.ingress.local.ingressClassが設定されているか確認します。このフィールドが設定されていない場合、APIG ゲートウェイインスタンスは Ingress リソースを監視せず、Ingress を再作成してもエンドポイントは復元されません。このフィールドをapigに設定します。 -
Ingress の IngressClass が、ApigConfig の
ingress.local.ingressClass値と一致することを確認してください。 Ingress の IngressClass は、kubernetes.io/ingress.class: apigアノテーションまたはspec.ingressClassNameフィールドを使用して指定できます。 -
kubectl get apigconfigコマンドを実行して、ApigConfig のステータスがListeningであるかどうかを確認します。 -
前述の設定が正しいことを確認した後、Ingress を再作成してください。エンドポイントは自動的に復元されます。APIG ゲートウェイインスタンスを再作成する必要はありません。