How to whiten the network segment specified by ACK for pod under the Terway network

Container Service for Kubernetes (ACK) のコンテナネットワークは、主に Flannel と Terway で構成されています。Flannel ネットワークでは、Pod はノードの NAT を介して他のサービスにアクセスするため、Flannel ネットワークでデータベースのホワイトリストを設定する際、クライアント Pod をノードバインディングによって少数の固定ノードにスケジューリングし、そのノードの IP アドレスをデータベース側にホワイトリスト追加できます。この方法は比較的シンプルですが、詳細な説明は省略します。一方、Terway ネットワークでは、Pod IP は ENI によって提供され、Pod は ENI を通じて外部サービスにアクセスします。外部サービスが取得するクライアント IP は ENI が提供する IP アドレスであり、Pod とノードをアフィニティでバインドしても、Pod が外部サービスにアクセスする際のクライアント IP はノード IP ではなく ENI が提供する IP です。Pod IP は Terway で指定された vSwitch から IP アドレスをランダムに割り当てるため、クライアント Pod には自動スケーリングなどの設定がある場合が多く、Pod IP を固定できるシナリオでも弾力的なスケーリングに対応できません。この場合、最適な方法はクライアント用にネットワークセグメントを割り当てて IP を割り振り、データベース側でそのネットワークセグメントをホワイトリスト追加することです。では、Terway ネットワークモードで Pod が使用する IP 範囲をどのように指定すればよいでしょうか。

実際、Terway は指定ノード上の Pod に対して指定 vSwitch を使用する機能を提供しています。

簡単に言えば、指定ノードにラベルを追加して Pod が使用する vSwitch を指定し、Pod を固定ラベルを持つノードにスケジューリングすることで、Pod はカスタム vSwitch を通じて Pod IP を作成できます。以下に簡単な手順を示します。

kube-system 名前空間に独立した ConfigMap「eni-config-fixed」を作成し、その中に特別な vSwitch「vsw-2zem796p76viir02c6980 10.2.1.0/24」を指定します。
apiVersion: v1
data:
eni_conf: |
{
"vswitches": {"cn-beijing-h":["vsw-2zem796p76viir02c6980"]}
}
kind: ConfigMap
metadata:
name: eni-config-fixed
namespace: kube-system

ノードプールを作成し、ノードに「terway-config:eni-config-fixed」というラベルを付けます。ノードプール内のノードに他の Pod がスケジューリングされないようにするため、同時にノードプールへ Taint を設定できます。例:「fixed=true:NoSchedule」

このノードプールを通じて拡張されたノードには、デフォルトで前述のラベルと Taint が付与されます。
Pod を作成し、前述のラベルを持つノードにスケジューリングします(Toleration の追加に注意)。

apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
name: nginx-fixed
labels:
app: nginx-fixed
spec:
replicas: 2
selector:
matchLabels:
app: nginx-fixed
template:
metadata:
labels:
app: nginx-fixed
spec:
tolerations:
- key: "fixed"
operator: "Equal"
value: "true"
effect: "NoSchedule"
nodeSelector:
terway-config: eni-config-fixed
containers:
-name: nginx
image: nginx:1.9.0 # replace it with your exactly
ports:
- containerPort: 80

Pod IP が独自に指定した vSwitch から割り当てられていることが確認できます。
これにより、データベース側でこの vSwitch を直接ホワイトリスト追加し、動的 Pod IP のアクセス制御を実装できます。

注意:
新規ノードを作成することを推奨します。既存ノードを使用する場合、クラスターに追加する前に ENI と ECS インスタンスのバインドを解除する必要があります(ECS コンソールで操作可能)。クラスターへの追加方法は、既存ノードの自動追加(システムディスクの置き換え)です。

特定のノードプールにラベルと Taint を設定し、ホワイトリスト不要なサービスがこれらのノードにスケジューリングされないように注意してください。

この使用方法は実際には設定のオーバーライドであり、現在指定されている ConfigMap の設定を使用して、以前の eni-config 設定を上書きします。

指定 vSwitch の IP 数は、想定される Pod 数の 2 倍以上であることを推奨します。一方では将来の拡張にある程度の余裕を持たせ、他方では障害発生時に Pod IP がタイムリーに回収できず、Pod IP の割り当て不能な障害を防ぐこともできます。

Related Articles

Explore More Special Offers

  1. Short Message Service(SMS) & Mail Service

    50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00

phone お問い合わせ
Hi, I'm Alibaba Cloud AI Assistant!
I can help with questions and solutions.