ネットワークセキュリティには、アクセス制御とトラフィック暗号化が含まれます。 ネットワークポリシーを定義して、サービス間のネットワークアクセスを制限し、特定のトラフィックのみを許可できます。 ネットワークポリシーは、デフォルトの許可または拒否ルール、名前空間の分離、セキュリティグループ設定など、さまざまな設定で構成されます。 データ送信中にトラフィックを暗号化して、機密データの改ざんや侵害を防ぐことができます。 上記の技術とソリューションを採用することで、サービス間のセキュリティを強化し、機密データの転送を保護できます。
ネットワークポリシー
デフォルトでは、ポッドはKubernetesクラスター内で相互に通信できます。 これにより、運用環境ではセキュリティリスクが発生します。 Kubernetesネットワークポリシーを作成して、ポッド間のトラフィック、およびポッドと外部サービス間のトラフィックを制御できます。 ポッド間のトラフィックは、東西のトラフィックを指します。 ネットワークポリシーは、ポッドセレクターとラベルを使用して、ソースポッドと宛先ポッドを識別します。 さらに、IPアドレス、ポート、プロトコル、およびそれらの組み合わせをネットワークポリシーで指定できます。 Terwayネットワークプラグインを使用する場合、IPアドレスまたはポートレベルでネットワークトラフィックを制御する場合は、特定のアプリケーションのネットワークポリシーを設定できます。 詳細については、「ACKクラスターでのネットワークポリシーの使用」および「Kubernetes network Policy Recipes」をご参照ください。
Terwayネットワークプラグインを使用するクラスターのみがKubernetesネットワークポリシーをサポートしています。 クラスターに100を超えるノードが含まれている場合、Kubernetesネットワークポリシーのプロキシによって、クラスターのKubernetesコントロールプレーンの負荷が増加する可能性があります。 この場合、クラスター内のKubernetesネットワークポリシーを最適化する必要があります。 詳細については、「Terwayモードの大規模なACKクラスターのNetworkPolicy機能のパフォーマンスの向上」をご参照ください。
すべてのトラフィックを拒否するデフォルトのネットワークポリシーを作成する
ロールベースのアクセス制御 (RBAC)
ポリシーと同様に、ネットワークポリシー
を作成するときは、最小権限の原則に従う必要があります。 名前空間からのすべてのインバウンドトラフィックとアウトバウンドトラフィックを拒否するデフォルトのネットワークポリシーを作成できます。 Calicoを使用してグローバルネットワークポリシーを作成することもできます。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
DNSクエリを許可するネットワークポリシーを作成する
すべてのインバウンドトラフィックとアウトバウンドトラフィックを拒否するデフォルトのネットワークポリシーを作成した後、特定の目的のためにネットワークポリシーを作成できます。 たとえば、ポッドがCoreDNSにDNSクエリを送信できるようにするグローバルネットワークポリシーを作成できます。
次のコマンドを実行して、名前空間にラベルを追加します。
kubectl label namespace kube-system name=kube-system
次のYAMLテンプレートを使用してネットワークポリシーを作成します。
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-dns-access namespace: default spec: podSelector: matchLabels: {} policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: name: kube-system ports: - protocol: UDP port: 53
重要Kubernetesネットワークポリシーを使用してポッド間のネットワークトラフィックを制御する方法の詳細については、「ネットワークポリシー」をご参照ください。
特定のポッドからのトラフィックを許可する
次のシナリオでは、特定のポッドからのトラフィックを許可するネットワークポリシーを作成できます。
特定のマイクロサービスのみにアプリケーションへのアクセスを許可したい場合。
特定のアプリケーションのみにデータベースへのアクセスを許可したい場合。
次のコマンドを実行して、
app-bookstore
とrole=api
ラベルを作成します。kubectl run apiserver --image=nginx --labels="app=bookstore,role=api" --expose --port=80
次のテンプレートに基づいてYAMLファイルを作成し、
kubectl apply -f
コマンドを実行して、YAMLファイルを使用してネットワークポリシーを展開します。ネットワークポリシーは、
app-bookstore
ラベルを持つポッドからのトラフィックのみを許可します。kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: api-allow spec: podSelector: matchLabels: app: bookstore role: api ingress: - from: - podSelector: matchLabels: app: bookstore
次のコマンドを実行して、app-bookstoreラベルがないポッドからのアクセスが拒否されるかどうかを確認します。
kubectl run test-$RANDOM -- rm -i -t -- image=alpine -- sh
期待される出力:
/ # wget -qO- --timeout=2 http://apiserver wget: download timed out
次のコマンドを実行して、
app-bookstore
ラベルを持つポッドからのアクセスが許可されているかどうかを確認します。kubectl run test-$RANDOM --rm -i -t --image=alpine --labels="app=bookstore,role=frontend" -- sh
期待される出力:
/ # wget -qO- --timeout=2 http://apiserver <!DOCTYPE html> <html><head>
名前空間内の特定のポッド間のトラフィックを許可するカスタムルールの追加
名前空間内のポッド間の通信を許可するネットワークポリシーを作成した後、名前空間内の特定のポッド間の通信を制限するカスタムルールを追加できます。 詳細については、「Kubernetesネットワークポリシーレシピ」をご参照ください。
交通データの監視と分析
Alibaba Cloud Virtual Private Cloud (VPC) は、elastic network Interface (ENI) のインバウンドトラフィックとアウトバウンドトラフィックに関する情報を記録するフローログを提供します。 フローログは、アクセス制御リスト (ACL) ルールの検証、ネットワークトラフィックの監視、ネットワークの問題のトラブルシューティングに役立ちます。 フローログを分析することで、VPC内のリソース (ポッドを含む) 間の異常なトラフィックを特定できます。 詳細については、「フローログの概要」をご参照ください。
セキュリティグループ
ACKはセキュリティグループを使用して、マスターノードとワーカーノード間のトラフィックを管理します。 セキュリティグループを使用して、ワーカーノード、他のVPCリソース、および外部IPアドレス間のトラフィックを管理することもできます。 ACKクラスターを作成すると、クラスターのセキュリティグループが自動的に作成されます。 セキュリティグループは、クラスタ内のノード間の通信を可能にする。 セキュリティを強化するために、セキュリティグループにインバウンドルールとアウトバウンドルールを追加して、最小権限の原則を実装できます。 詳細については、「クラスターセキュリティグループの推奨されるインバウンドルールとアウトバウンドルール」をご参照ください。
詳細については、「異なるシナリオでのセキュリティグループの設定」および「セキュリティグループの設定」をご参照ください。
データ送信の暗号化
Service Mesh (ASM)
ASMは、サービス間で送信されるデータを暗号化できる。 相互トランスポート層セキュリティ (mTLS) 認証に加えて、Envoy Secret Discovery Service (SDS) を使用して、サービスゲートウェイがHTTPSおよび動的証明書の読み込みをサポートできるようにすることもできます。 ASMとApplication High Availability Service (AHAS) を使用して、Service Meshインスタンスにデプロイされているアプリケーションのトラフィックを管理できます。 ASMはTracing Analysisと統合され、トレースマッピング、サービスコールカウント、トレーストポロジ、アプリケーション依存関係分析などの機能を分散アプリケーション開発者に提供します。 開発者はこれらの機能を使用して、分散アプリケーションアーキテクチャのパフォーマンスのボトルネックを特定および診断し、開発と診断をより効率的にすることができます。
シークレットを使用してTLSを設定し、HTTPSアクセスを有効にする
クラスター内のIngressによって公開されるサービスのHTTPSアクセスを有効にする必要があります。 詳細については、「シークレットを使用してTLSを設定し、HTTPSアクセスを有効にする」をご参照ください。