モダンアプリケーション向けの 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の概要
  • 簡単デプロイメントの例

Part 2 - F5 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 を使用した仕組みと統合する方法を紹介します。

 

 

 

Published Dec 23, 2022
Version 1.0
No CommentsBe the first to comment