モダンアプリケーション向けの F5 クラウドネイティブ・ネットワーク機能 Part 2
This post is also available in English (英語)
本記事では、F5 のBIG-IP Next Cloud-Native Functions の詳細設定について紹介します。
Part 1 - F5 Cloud-Native Functions の概要
- なぜ今Cloud-Nativeなのか?
- CNFの概要
- 簡単デプロイメントの例
- Cloud-native設定方法
- F5 CRDsの概要
- セキュリティとCGNAT のデプロイメント
CRDによるKubernetesリソースの拡張
Kubernetes はコンテナの構成管理、デプロイ、スケーリングなどのためのオーケストレーションツールとして使われています。しかし、 ネットワーク ファイアウォール セキュリティ、CGNAT、高度な DNS 機能、その他のキャリア グレードの機能が不十分です。そこで、Kubernetes には API を拡張する機能も備わっているため、F5 CNFを宣言的な方法で構成することができます。 Kubernetes API を使用しているため、クラウドネイティブの柱である CI/CD および自動化ツールセットと簡単に統合できます。
F5 Custom Resource Definitionsを使用した設定方法
インターネット宛てのトラフィックに対して NAT64 および L4 セキュリティ保護をするリスナーをセットアップするためのF5 CNF カスタム リソースの例を見てみましょう。
すべてのパラメーターの詳細は、リリース ノートに記載されています。
https://clouddocs.f5.com/cnfs/robin/latest/cnf-release-notes.html
NATポリシー
ここでは、NAT タイプを「dynamic-pat」にして、IPアドレス変換に使用されるアドレス ブロックまたはIPアドレス範囲、およびその他の一般的に使用される CGNAT 設定として定義します。
apiVersion: "k8s.f5net.com/v1"
kind: F5BigNatPolicy
metadata:
name: "nat-policy"
spec:
sourceTranslation:
- name: "dest4"
type: "dynamic-pat"
addresses:
- "12.12.112.0/24"
port: "1025-65535"
routeAdvertisement: true
mapping:
mode: endpoint-independent-mapping
inbound:
mode: "endpoint-independent-filtering"
eifTimeout: 300
hairpinMode: true
clientConnectionLimit: 2000
rule:
- name: rule4
sourceTranslation: "dest4"
ログプロファイル
リクエストとレスポンスをログ出力方法とタイミングを定義します。
apiVersion: "k8s.f5net.com/v1"
kind: F5BigLogProfile
metadata:
name: logprofile
spec:
firewall:
enabled: true
network:
publisher: publisher1
events:
aclMatchAccept: true
aclMatchDrop: true
translationFields: true
format:
type: user-defined
userDefinedFieldList: "${date_time},${bigip_hostname},${management_ip_address},${src_ip},${src_port},${dest_ip},${dest_port},${translated_src_ip},${translated_dest_ip},${translated_src_port},${translated_dest_port},${date_time},,${protocol},${action}"
protocolInspection:
enabled: true
publisher: publisher1
dns:
enabled: true
publisher: publisher1
responseLogging: true
ファイアウォール・ポリシー
この CR では、どのトラフィックを受け入れるか、拒否するか、またはドロップするかを定義します。
apiVersion: "k8s.f5net.com/v1"
kind: F5BigFwPolicy
metadata:
name: "fwpolicy"
spec:
rule:
- name: accept-ue
ipProtocol: any
action: "accept"
source:
vlans:
- "ue-vlan"
logging: true
- name: accept-client
ipProtocol: any
action: "accept"
source:
addresses:
- "220a:c000::/24"
destination:
addresses:
- "220a:c000::/24"
logging: true
- name: default-reject
action: "reject"
logging: true
リスナー
この CR では、前述のリソース参照とIPアドレスが定義されます。このリスナーでは定義されたポリシーに従ってトラフィック処理します。
apiVersion: "k8s.f5net.com/v1"
kind: F5BigContextSecure
metadata:
name: sc64
spec:
ipv6destinationAddress: "64:ff9b::/96"
ipProtocol: "any"
natPolicy: "nat-policy"
logProfile: "logprofile"
firewallEnforcedPolicy: "fwpolicy"
結果
高度な設定とコール フローに関する詳細は省略しましたが、本記事では、NAT64機能とファイアウォール セキュリティ機能をKubernetes上で実現する方法の概要を紹介しました。
次の記事では、以下のようなfluentd ベースのログ出力とKafka を使用した仕組みと統合する方法を紹介します。