すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:ASM ゲートウェイの CRD フィールド

最終更新日:Jan 13, 2025

サービスメッシュ (ASM) は、kindIstioGateway で、apiVersionistio.alibabacloud.com/v1beta1 である CustomResourceDefinition (CRD) API リソースを提供します。さらに、ASM はリソースを管理するためのコントローラーを提供します。コントローラーは CRD の変更を監視し、コントローラーが実行されている Kubernetes クラスターのサービス、デプロイメント、およびサービスアカウントを更新します。このトピックでは、ASM ゲートウェイの設定例と CRD フィールドについて説明します。

設定例

前提条件

コンテナサービス Kubernetes 版 (ACK) クラスターが ASM インスタンスに追加されています。詳細については、「ASM インスタンスへのクラスターの追加」をご参照ください。

重要

ASM ゲートウェイは istio-system 名前空間にデプロイする必要があります。こうすることで、ASM ゲートウェイを起動するときに、ASM ゲートウェイの設定を取得して起動を成功させることができます。インスタンスの Istio バージョンが 1.6 以降で、ASM ゲートウェイを別の名前空間にデプロイすると、ゲートウェイ設定の取得に失敗するため、ASM ゲートウェイを起動できません。

例 1:Kubernetes API を使用してイングレスゲートウェイを作成および管理する

  1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[ASM ゲートウェイ] > [イングレスゲートウェイ] を選択します。

  3. [イングレスゲートウェイ] ページで、[YAML から作成] をクリックします。

  4. [作成] ページで、[名前] フィールドにイングレスゲートウェイの名前を入力し、[名前空間] ドロップダウンリストから [istio-system] を選択し、YAML ファイルで次のフィールドを設定して、[作成] をクリックします。

    CRD フィールドの詳細については、「CRD フィールド」をご参照ください。

    展開して YAML ファイルを表示

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:   
      name: "myexample-customingressgateway"  
      namespace: "istio-system"
    spec:  
      clusterIds:
        - "${実際のクラスター ID}"
        - "${実際のクラスター ID}" # ASM ゲートウェイは複数のクラスターにデプロイできます。
      cpu: 
        targetAverageUtilization: 80
      env:
        - name: "envname1"
          value: "envvalue1"
      externalTrafficPolicy: Local
      gatewayType: ingress
      podLabels:
        key1: value1
      ports:  
      - name: status-port    
        port: 15020    
        targetPort: 15020  
      - name: http2    
        port: 80    
        targetPort: 80  
      - name: https    
        port: 443    
        targetPort: 0  
      - name: tls    
        port: 15443    
        targetPort: 15443  
      replicaCount: 1  
      resources:
        limits:
          cpu: '2'
          memory: 2G
        requests:
          cpu: 200m
          memory: 256Mi
    # - name: config-volume-lua
    #  configMapName: lua-libs
    #  mountPath: /var/lib/lua
    # secretVolumes:
    # - name: myexample-customingressgateway-certs
    #   secretName: istio-myexample-customingressgateway-certs
    #   mountPath: /etc/istio/myexample-customingressgateway-certs
      serviceType: LoadBalancer  
      serviceAnnotations:    
        service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet  
      serviceLabels:
        serviceLabelKey1: "serviceLabelValue1"
      podAnnotations:
        podAnnotationsKey1: "podAnnotationsValue1"
      rollingMaxSurge: "100%"
      rollingMaxUnavailable: "25%"
      overrides:
        cluster1Id:
          replicaCount: 1 
          resources:
            limits:
              cpu: '2'
              memory: 2G
            requests:
              cpu: 200m
              memory: 256Mi
          serviceAnnotations:    
            service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
            service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.s1.small"
        cluster2Id:
          replicaCount: 2
          resources:
            limits:
              cpu: '4'
              memory: 4G
            requests:
              cpu: 400m
              memory: 512Mi
          serviceAnnotations:    
            service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
            service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.s2.small"

    説明

    Kubernetes 用の Go Client を使用してイングレスゲートウェイを管理する必要がある場合は、「ASM ゲートウェイの Go 構造体」をご参照ください。

  5. 次の手順を実行して、イングレスゲートウェイのサービス情報を表示します。

    1. ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。

    2. [クラスター] ページで、管理するクラスターを見つけて名前をクリックします。左側のペインで、[ネットワーク] > [サービス] を選択します。

    3. [サービス] ページの上部で、[名前空間] ドロップダウンリストから [istio-system] を選択します。

    4. サービスのリストで、目的のイングレスゲートウェイのサービスの名前をクリックして、その情報を表示します。

  6. イングレスゲートウェイの Pod 情報を表示します。

    1. ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。

    2. [クラスター] ページで、管理するクラスターを見つけて名前をクリックします。左側のペインで、[ワークロード] > [pod] を選択します。

    3. [pod] ページの上部で、[名前空間] ドロップダウンリストから [istio-system] を選択します。

    4. Pod のリストで、イングレスゲートウェイの Pod を見つけて Pod 名をクリックして、Pod 情報を表示します。

例 2:Kubernetes API を使用してエグレスゲートウェイを作成および管理する

ASM は、メッシュ内のすべてのアウトバウンドトラフィックをルーティングするためのエグレスゲートウェイサービスを提供します。

  1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[ASM ゲートウェイ] > [エグレスゲートウェイ] を選択します。

  3. [エグレスゲートウェイ] ページで、[YAML から作成] をクリックします。

  4. [作成] ページで、[名前] フィールドにエグレスゲートウェイの名前を入力し、[名前空間] ドロップダウンリストから [istio-system] を選択し、YAML ファイルで次のフィールドを設定して、[作成] をクリックします。

    CRD フィールドの詳細については、「CRD フィールド」をご参照ください。

    展開して YAML ファイルを表示

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      name: egressgateway
      namespace: istio-system
    spec:
      autoCreateGatewayYaml: false
      clusterIds:
        - ${実際のクラスター ID}
      disableContainerPortExposed: true
      dnsPolicy: ClusterFirst
      gatewayType: egress
      hostNetwork: false
      podLabels:
        security.istio.io/tlsMode: istio
      ports:
        - name: http-0
          port: 80
          protocol: HTTP
          targetPort: 80
        - name: https-1
          port: 443
          protocol: HTTPS
          targetPort: 443
      readinessProbe: {}
      replicaCount: 1
      resources:
        limits:
          cpu: '2'
          memory: 4G
        requests:
          cpu: 200m
          memory: 256Mi
      rollingMaxSurge: 25%
      rollingMaxUnavailable: 25%
      runAsRoot: true
      serviceType: ClusterIP
  5. 次の手順を実行して、エグレスゲートウェイのサービス情報を表示します。

    1. ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。

    2. [クラスター] ページで、管理するクラスターを見つけて名前をクリックします。左側のペインで、[ネットワーク] > [サービス] を選択します。

    3. [サービス] ページの上部で、[名前空間] ドロップダウンリストから [istio-system] を選択します。

    4. サービスのリストで、目的のエグレスゲートウェイのサービスの名前をクリックして、その情報を表示します。

  6. エグレスゲートウェイの Pod 情報を表示します。

    1. ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。

    2. [クラスター] ページで、管理するクラスターを見つけて名前をクリックします。左側のペインで、[ワークロード] > [pod] を選択します。

    3. [pod] ページの上部で、[名前空間] ドロップダウンリストから [istio-system] を選択します。

    4. Pod のリストで、エグレスゲートウェイの Pod を見つけて Pod 名をクリックして、Pod 情報を表示します。

CRD フィールド

フィールド

説明

デフォルト値

metadata.name

ASM ゲートウェイの名前。生成される Kubernetes サービスとデプロイメントはどちらも istio-{metadata.name フィールドの値} という名前になります。

なし

metadata.namespace

ASM ゲートウェイがデプロイされる名前空間。生成される Kubernetes サービスとデプロイメントはこの名前空間に存在します。

重要

生成される Kubernetes サービスとデプロイメントが Istio 1.6 以降で使用できるようにするには、名前空間を istio-system にする必要があります。

istio-system

clusterIds

ASM ゲートウェイをデプロイするクラスターの ID。値は配列です。クラスターは現在の ASM インスタンスで管理されている必要があります。

なし

env

ASM ゲートウェイ Pod の環境変数。値は配列です。

なし

externalTrafficPolicy

ゲートウェイがインバウンドトラフィックをノードローカルエンドポイントまたはクラスターワイドエンドポイントのどちらにルーティングするかを指定します。有効な値:Cluster または Local

説明

このフィールドは、イングレスゲートウェイでのみ使用できます。

Cluster

ports

ASM ゲートウェイ Pod に定義されているポートとプロトコル。値は配列です。次に例を示します。

  • name: http2 port: 80 targetPort: 80 protocol: HTTP2

  • name: https port: 443 targetPort: 443 protocol: HTTPS

説明

1.9.7.107 より前のバージョンでは、protocol フィールドを TCP に設定する必要があります。

なし

gatewayType

ASM ゲートウェイのタイプ。有効な値:ingress および egress

  • ingress:メッシュ内のすべてのインバウンドトラフィックをルーティングするイングレスゲートウェイを示します。

  • egress:メッシュ内のすべてのアウトバウンドトラフィックをルーティングするエグレスゲートウェイを示します。

ingress

replicaCount

Pod レプリカの数。

1

configVolumes

ASM ゲートウェイ Pod にマウントされる ConfigMap ボリュームに関する情報。次に例を示します。

- name: config-volume-lua
  configMapName: lua-libs
  mountPath: /var/lib/lua

なし

resources

ASM ゲートウェイ Pod のリソース設定。

  • limits:

    • cpu: '2'

    • memory: 2G

  • requests:

    • cpu: 200m

    • memory: 256Mi

secretVolumes

ASM ゲートウェイ Pod にマウントされるシークレットボリュームに関する情報。次に例を示します。

- name: myexample-customingressgateway-certs
  secretName: istio-myexample-customingressgateway-certs
  mountPath: /etc/istio/myexample-customingressgateway-certs

なし

serviceType

ASM ゲートウェイのサービスタイプ。有効な値:LoadBalancerNodePort、および ClusterIP。エグレスゲートウェイの場合、このフィールドの値は通常 ClusterIP に設定されます。

重要

データプレーンで登録済みクラスターを使用し、このフィールドが LoadBalancer に設定されている場合は、クラスターが LoadBalancer サービスをサポートしていることを確認してください。そうでない場合、ASM ゲートウェイの作成に失敗する可能性があります。

LoadBalancer

loadBalancerClass

ASM ゲートウェイの loadBalancerClass。このフィールドは、serviceType パラメーターが LoadBalancer に設定されている場合にのみ有効です。このフィールドは、v1.18 以降の ASM インスタンスでサポートされています。詳細については、「NLB インスタンスをイングレスゲートウェイに関連付ける」をご参照ください。

なし

serviceAnnotations

ASM ゲートウェイのアノテーション。例:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain: 'on' service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout: '20'。一般的なアノテーションの詳細については、「サービスの YAML ファイルにアノテーションを追加して CLB インスタンスを設定する」をご参照ください。

説明

このフィールドは、serviceType が LoadBalancer であるゲートウェイでのみ使用できます。エグレスゲートウェイの場合、このフィールドは通常設定されません。

なし

serviceLabels

ASM ゲートウェイのラベル。

なし

podLabels

ASM ゲートウェイ Pod のラベル。

なし

podAnnotations

ASM ゲートウェイ Pod のアノテーション。

なし

rollingMaxSurge

ローリングアップデート中に、想定されるレプリカ数を超えてスケジュールされる Pod の最大数。値は絶対値またはパーセンテージです。

"100%"

rollingMaxUnavailable

ローリングアップデート中に使用できない Pod の最大数。値は絶対値またはパーセンテージです。

"25%"

overrides

特定のクラスターに個別の設定を行います。clusterIds フィールドで 2 つ以上のクラスターが指定されている場合、このフィールドを使用できます。前のクラスター設定とは異なる設定で特定のクラスターを設定する場合に、このフィールドを使用できます。値は、キーと値のペアを含む MAP タイプです。

説明
  • keyclusterIds フィールドで指定されたクラスター ID。

  • 次のリストでは、overrides フィールドで設定できるパラメーターの一部について説明します。

    • serviceAnnotations

    • podAnnotations

    • resources

    • replicaCount

    • Horizontal Pod Autoscaling (HPA) 関連の設定 (バージョン 1.16 以降の ASM インスタンスでサポート)

    • serviceType (バージョン 1.16 以降の ASM インスタンスでサポート)

なし

kernel.enabled

カスタムカーネルフィールドを有効にするかどうかを指定します。

false

kernel.parameters

カーネルフィールド。次のカーネルフィールドがサポートされています。

  • net.core.somaxconn

  • net.core.netdev_max_backlog

  • net.ipv4.tcp_rmem

  • net.ipv4.tcp_wmem

  • net.ipv4.ip_local_port_range

  • net.ipv4.tcp_fin_timeout

  • net.ipv4.tcp_tw_timeout

  • net.ipv4.tcp_tw_reuse

  • net.ipv4.tcp_tw_recycle

  • net.ipv4.tcp_timestamps

  • net.ipv4.tcp_retries2

  • net.ipv4.tcp_slow_start_after_idle

  • net.ipv4.tcp_max_orphans

  • net.ipv4.tcp_max_syn_backlog

  • net.ipv4.tcp_no_metrics_save

  • net.ipv4.tcp_autocorking

  • kernel.printk

  • vm.swappiness

説明

ASM でサポートされている特定のカーネルフィールドは、ホストのカーネルバージョンが原因で無効になる場合があります。この状況が発生した場合、ASM ゲートウェイ Pod はエラーを報告する可能性があります。

kubectl describe pod コマンドを実行して、ASM ゲートウェイ Pod によって報告されたエラーを表示できます。無効なフィールドを削除すると、コンテナーは想定どおりに起動できます。

すべてのカーネルフィールドの値は文字列形式である必要があります。YAML は数値を数値として認識します。したがって、各値を二重引用符 (") で囲む必要があります。例:net.core.somaxconn:"65535"。

なし

compression.enabled

イングレスゲートウェイの圧縮機能を有効にするかどうかを指定します。

説明

compression 関連のフィールドは、イングレスゲートウェイでのみ使用できます。

false

compression.content_type

Content-Type ヘッダーで示される、圧縮されるデータのタイプ。次に例を示します。

  • text/html

  • application/json

なし

compression.disable_on_etag_header

  • HTTP レスポンスに ETag ヘッダーが含まれている場合に圧縮機能を無効にするかどうかを指定します。フィールドを true に設定すると、HTTP レスポンスに ETag ヘッダーが含まれている場合、圧縮機能は無効になります。

  • フィールドを false に設定すると、HTTP レスポンスに ETag ヘッダーが含まれている場合、圧縮機能は有効になります。

false

compression.min_content_length

圧縮がトリガーされるしきい値。フィールド値は、Content-Length ヘッダーのサイズを示します。

30

compression.remove_accept_encoding_header

  • イングレスゲートウェイが HTTP リクエストをアップストリームサーバーに転送する前に、クライアントから送信された HTTP リクエストから Accept-Encoding ヘッダーを削除するかどうかを指定します。フィールドを true に設定すると、HTTP リクエストから Accept-Encoding ヘッダーが削除されます。

  • フィールドを false に設定すると、HTTP リクエストに Accept-Encoding ヘッダーが保持されます。

false

compression.gzip

圧縮形式。GZIP 形式のみがサポートされています。圧縮機能を有効にする場合は、このフィールドが必要です。他のすべてのフィールドにデフォルト値を使用する場合は、このフィールドを空のままにする必要があります。例:gzip: {}

なし

compression.gzip.memory_level

zlib ライブラリのメモリ使用量レベル。有効な値:1 ~ 9。このフィールドの値が大きいほど、メモリ使用量は増加しますが、圧縮速度と圧縮品質は向上します。

5

compression.gzip.compression_level

zlib ライブラリで使用される圧縮レベル。有効な値:

  • COMPRESSION_LEVEL_1

  • COMPRESSION_LEVEL_2

  • COMPRESSION_LEVEL_3

  • COMPRESSION_LEVEL_4

  • COMPRESSION_LEVEL_5

  • COMPRESSION_LEVEL_6

  • COMPRESSION_LEVEL_7

  • COMPRESSION_LEVEL_8

  • COMPRESSION_LEVEL_9

  • DEFAULT_COMPRESSION

  • BEST_COMPRESSION

  • BEST_SPEED

説明

BEST_COMPRESSION は最高の圧縮品質を示します。BEST_SPEED は最高の圧縮速度を示します。次のリストでは、いくつかの圧縮レベルについて説明します。

  • COMPRESSION_LEVEL_1 は BEST_SPEED と同等であり、最速の圧縮速度と低い圧縮率を備えています。

  • COMPRESSION_LEVEL_9 は BEST_COMPRESSION と同等です。7 ~ 9 の圧縮レベルは、最高の圧縮率と低い圧縮速度を備えています。

  • COMPRESSION_LEVEL_6 は DEFAULT_COMPRESSION と同等です。2 ~ 6 の圧縮レベルは中程度の圧縮レベルであり、圧縮率と速度のバランスが取れています。

DEFAULT_COMPRESSION

compression.gzip.compression_strategy

zlib ライブラリで使用される圧縮ポリシー。有効な値:

  • DEFAULT_STRATEGY

  • FILTERED

  • FIXED

  • HUFFMAN_ONLY

  • RLE

説明

DEFAULT_STRATEGY

この圧縮ポリシーは、基になるデフォルトの動作を使用するデフォルトの圧縮ポリシーであり、ほとんどの場合に満足のいく圧縮結果を生成できます。

FILTERED

この圧縮ポリシーは、重複データが存在するほとんどのシナリオに適用可能なフィルタリング圧縮アルゴリズムを優先的に使用します。この圧縮ポリシーは、テキストデータと人工的に生成されたデータの圧縮率を向上させるのに役立ちます。

HUFFMAN_ONLY

この圧縮ポリシーは、圧縮にハフマン符号化のみを使用します。他のアルゴリズムは使用されません。この圧縮ポリシーは、一般的に静的データを圧縮するために使用されます。このような圧縮データはより迅速に解凍できます。

RLE

ランレングスエンコーディング (RLE) アルゴリズムは、ビットマップデータなどの反復データシーケンスの圧縮に非常に効果的です。

FIXED

この圧縮ポリシーは、特定のデータに基づいて動的に生成される符号木ではなく、事前定義された符号木を使用してハフマン符号化を実行します。これにより、高速な圧縮と解凍を実現できます。ただし、圧縮率は低くなります。

DEFAULT_STRATEGY

compression.gzip.window_bits

zlib ライブラリのウィンドウサイズ。有効な値:9 ~ 15。

12

compression.gzip.chunk_size

zlib ライブラリの出力バッファーサイズ。

4096

hostNetwork

ASM ゲートウェイ Pod がホストのネットワーク名前空間にアクセスすることを許可するかどうかを指定します。有効な値:

  • true:ASM ゲートウェイ Pod はホストのネットワーク名前空間を使用できます。

  • false:ASM ゲートウェイ Pod はホストのネットワーク名前空間を使用できません。

false

dnsPolicy

ASM ゲートウェイ Pod に設定されているドメインネームシステム (DNS) ポリシー。DNS ポリシーの詳細については、「サービスと Pod の DNS」をご参照ください。

ClusterFirst

cpu.targetAverageUtilization

HPA が有効になっている場合の予想 CPU 使用率。有効な値:1 ~ 100。メモリ使用率がこの値を超えると、Pod レプリカの数が増加します。メモリ使用率がこの値未満の場合、Pod レプリカの数は減少します。

なし

memory.targetAverageUtilization

HPA が有効になっている場合の予想メモリ使用率。有効な値:1 ~ 100。メモリ使用率がこの値を超えると、Pod レプリカの数が増加します。メモリ使用率がこの値未満の場合、Pod レプリカの数は減少します。

なし

maxReplicas

ASM ゲートウェイの HPA 機能によってスケーリングできる Pod レプリカの最大数。このフィールドの値は正の整数である必要があります。

なし

minReplicas

ASM ゲートウェイの HPA 機能によってスケーリングできる Pod レプリカの最小数。値は正の整数です。最小値は 1 です。

なし

nodeSelector

ASM ゲートウェイ Pod が存在するノードのラベルを指定します。キーと値をカスタマイズできます。次に例を示します。

nodeSelector:
  key1: value1

なし

affinity

ノードアフィニティを設定して、ASM ゲートウェイ Pod をノードにスケジュールできます。詳細については、「アフィニティとアンチアフィニティ」をご参照ください。

なし

tolerations

ASM ゲートウェイ Pod の toleration を設定して、ノードの taint を許容できます。詳細については、「taint と toleration」をご参照ください。

なし

変更すると ASM ゲートウェイのローリング再起動が発生するフィールド

次のフィールドを変更すると、ASM ゲートウェイのローリング再起動が発生します。これらのフィールドを変更する場合は注意してください。

  • env

  • ports (ASM インスタンスのバージョンが 1.16 より前の場合、このフィールドを変更すると ASM ゲートウェイがローリング方式で再起動します。ASM インスタンスのバージョンが 1.16 以降の場合、このフィールドを変更しても ASM ゲートウェイはローリング方式で再起動しません。)

  • configVolumes

  • resources

  • secretVolumes

  • podLabels

  • podAnnotations

  • kernel.enabled

  • kernel.parameters

  • hostNetwork

  • dnsPolicy

  • nodeSelector (スケジューリングの影響を受ける)

  • affinity (スケジューリングの影響を受ける)

  • tolerations (スケジューリングの影響を受ける)

ゲートウェイの Go 構造体

展開してサンプルファイルを表示

package v1beta1

// ゲートウェイタイプの定義
type GatewayType string
type ConfigState string

// ゲートウェイタイプの定数
const (
    GatewayTypeIngress GatewayType = "ingress"
    GatewayTypeEgress  GatewayType = "egress"
)

// IstioGatewaySpec は、Istio の望ましい状態を定義します。
// +k8s:openapi-gen=true
type IstioGatewaySpec struct {
    // +kubebuilder:validation:Enum=ingress;egress
    GatewayType                    GatewayType `json:"gatewayType,omitempty"`
    IstioGatewayBasicConfiguration `json:",inline"`
    ClusterIds                     []string                                  `json:"clusterIds,omitempty"`
    clusterId                      string                                    `json:"clusterId,omitempty"`
    Overrides                      map[string]IstioGatewayBasicConfiguration `json:"overrides,omitempty"`
}

// カーネルパラメーターの構造体
type KernelParameters struct {
    NetCoreSoMaxConn             *string `json:"net.core.somaxconn,omitempty"`
    NetCoreNetdevMaxBacklog      *string `json:"net.core.netdev_max_backlog,omitempty"`
    NetIpv4TcpRMem               *string `json:"net.ipv4.tcp_rmem,omitempty"`
    NetIpv4TcpWMem               *string `json:"net.ipv4.tcp_wmem,omitempty"`
    NetIpv4IpLocalPortRange      *string `json:"net.ipv4.ip_local_port_range,omitempty"`
    NetIpv4TcpFinTimeout         *string `json:"net.ipv4.tcp_fin_timeout,omitempty"`
    NetIpv4TcpTwTimeout          *string `json:"net.ipv4.tcp_tw_timeout,omitempty"`
    NetIpv4TcpTwReuse            *string `json:"net.ipv4.tcp_tw_reuse,omitempty"`
    NetIpv4TcpTwRecycle          *string `json:"net.ipv4.tcp_tw_recycle,omitempty"`
    NetIpv4TcpTimestamps         *string `json:"net.ipv4.tcp_timestamps,omitempty"`
    NetIpv4TcpRetries2           *string `json:"net.ipv4.tcp_retries2,omitempty"`
    NetIpv4TcpSlowStartAfterIdle *string `json:"net.ipv4.tcp_slow_start_after_idle,omitempty"`
    NetIpv4TcpMaxOrphans         *string `json:"net.ipv4.tcp_max_orphans,omitempty"`
    NetIpv4TcpMaxSynBacklog      *string `json:"net.ipv4.tcp_max_syn_backlog,omitempty"`
    NetIpv4TcpNoMetricsSave      *string `json:"net.ipv4.tcp_no_metrics_save,omitempty"`
    NetIpv4TcpAutocorking        *string `json:"net.ipv4.tcp_autocorking,omitempty"`
    KernelPrintk                 *string `json:"kernel.printk,omitempty"`
    VmSwappiness                 *string `json:"vm.swappiness,omitempty"`
}

// カーネル設定の構造体
type KernelConfiguration struct {
    Enabled    *bool            `json:"enabled,omitempty"`
    Parameters KernelParameters `json:"parameters,omitempty"`
}

// Gzip 圧縮設定の構造体
type GzipCompressorConfiguration struct {
    MemoryLevel         *uint32 `json:"memory_level,omitempty"`
    CompressionLevel    *string `json:"compression_level,omitempty"`
    CompressionStrategy *string `json:"compression_strategy,omitempty"`
    WindowBits          *uint32 `json:"window_bits,omitempty"`
    ChunkSize           *uint32 `json:"chunk_size,omitempty"`
}

// 圧縮設定の構造体
type CompressorConfiguration struct {
    Enabled                    *bool                        `json:"enabled,omitempty"`
    MinContentLength           *uint32                      `json:"min_content_length,omitempty"`
    ContentType                *[]string                    `json:"content_type,omitempty"`
    DisableOnETagHeader        *bool                        `json:"disable_on_etag_header,omitempty"`
    RemoveAcceptEncodingHeader *bool                        `json:"remove_accept_encoding_header,omitempty"`
    Gzip                       *GzipCompressorConfiguration `json:"gzip,omitempty"`
}

// 準備プローブ設定の構造体
type ReadinessProbeConfiguration struct {
    FailureThreshold int32 `json:"failureThreshold,omitempty"`
    PeriodSeconds    int32 `json:"periodSeconds,omitempty"`
    SuccessThreshold int32 `json:"successThreshold,omitempty"`
}


// +k8s:openapi-gen=true
type IstioGatewayBasicConfiguration struct {
    ReplicaCount     int32 `json:"replicaCount,omitempty"`
    AutoscaleEnabled bool  `json:"autoscaleEnabled,omitempty"`
    MinReplicas      int32 `json:"minReplicas,omitempty"`
    MaxReplicas      int32 `json:"maxReplicas,omitempty"`
    // +kubebuilder:validation:Enum=ClusterIP;NodePort;LoadBalancer
    ServiceType           corev1.ServiceType           `json:"serviceType,omitempty"`
    LoadBalancerIP        string                       `json:"loadBalancerIP,omitempty"`
    ExternalTrafficPolicy string                       `json:"externalTrafficPolicy,omitempty"`
    ServiceAnnotations    map[string]string            `json:"serviceAnnotations,omitempty"`
    PodAnnotations        map[string]string            `json:"podAnnotations,omitempty"`
    ServiceLabels         map[string]string            `json:"serviceLabels,omitempty"`
    PodLabels             map[string]string            `json:"podLabels,omitempty"`
    Resources             *corev1.ResourceRequirements `json:"resources,omitempty"`
    EnvVars               []corev1.EnvVar              `json:"env,omitempty"`
    Ports                 []corev1.ServicePort         `json:"ports,omitempty"`
    MeshExpansionPorts    []corev1.ServicePort         `json:"meshExpansionPorts,omitempty"`
    NodeSelector          map[string]string            `json:"nodeSelector,omitempty"`
    ApplicationPorts      string                       `json:"applicationPorts,omitempty"`
    RequestedNetworkView  string                       `json:"requestedNetworkView,omitempty"`
    Affinity              *corev1.Affinity             `json:"affinity,omitempty"`
    Tolerations           []corev1.Toleration          `json:"tolerations,omitempty"`
    SecretVolumes         []SecretVolume               `json:"secretVolumes,omitempty"`
    ConfigVolumes         []ConfigVolume               `json:"configVolumes,omitempty"`
    RollingMaxSurge       *string                      `json:"rollingMaxSurge,omitempty"`
    RollingMaxUnavailable *string                      `json:"rollingMaxUnavailable,omitempty"`
    CPU                   HpaCPU                       `json:"cpu,omitempty"`
    Memory                HpaMemory                    `json:"memory,omitempty"`
    Kernel                KernelConfiguration          `json:"kernel,omitempty"`
    Compressor            CompressorConfiguration      `json:"compression,omitempty"`
    RunAsRoot             *bool                        `json:"runAsRoot,omitempty"`
    Lifecycle             *corev1.Lifecycle            `json:"lifecycle,omitempty"`
    ReadinessProbe        ReadinessProbeConfiguration  `json:"readinessProbe,omitempty"`
    HostNetwork           *bool                        `json:"hostNetwork,omitempty"`
    DnsPolicy             corev1.DNSPolicy             `json:"dnsPolicy,omitempty"`
    AutoCreateGatewayYaml *bool                        `json:"autoCreateGatewayYaml,omitempty"`
}

// シークレットボリュームの構造体
type SecretVolume struct {
    Name       string `json:"name,omitempty"`
    SecretName string `json:"secretName,omitempty"`
    MountPath  string `json:"mountPath,omitempty"`
}

// ConfigMap ボリュームの構造体
type ConfigVolume struct {
    Name          string `json:"name,omitempty"`
    ConfigMapName string `json:"configMapName,omitempty"`
    MountPath     string `json:"mountPath,omitempty"`
}

// +k8s:openapi-gen=true
type HpaCPU struct {
    TargetAverageUtilization *int32 `json:"targetAverageUtilization,omitempty"`
}

// +k8s:openapi-gen=true
type HpaMemory struct {
    TargetAverageUtilization *int32 `json:"targetAverageUtilization,omitempty"`
}

// +k8s:openapi-gen=true
type IstioGatewayStatus struct {
    // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
    // Important: Run "operator-sdk generate k8s" to regenerate code after modifying this file
    // Add custom validation using kubebuilder tags: https://book.kubebuilder.io/beyond_basics/generating_crd.html
    Status                     ConfigState      `json:"Status,omitempty"`
    GatewayAddress             []string         `json:"GatewayAddress,omitempty"`
    ClusterIdGatewayAddressMap []GatewayAddress `json:"ClusterIdGatewayAddressMap,omitempty"`

    ErrorMessage string `json:"ErrorMessage,omitempty"`
}

// +k8s:openapi-gen=true
type GatewayAddress struct {
    IPAddress string `json:"ipAddress,omitempty"`
    ClusterId string `json:"clusterId,omitempty"`
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// IstioGateway は、istiogateways API のスキーマです。
// +k8s:openapi-gen=true
// +kubebuilder:subresource:status
type IstioGateway struct {
    metav1.TypeMeta   `json:",inline"`
    metav1.ObjectMeta `json:"metadata,omitempty"`

    Spec   IstioGatewaySpec   `json:"spec,omitempty"`
    Status IstioGatewayStatus `json:"status,omitempty"`
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// IstioGatewayList には、IstioGateway のリストが含まれています。
type IstioGatewayList struct {
    metav1.TypeMeta `json:",inline"`
    metav1.ListMeta `json:"metadata,omitempty"`
    Items           []IstioGateway `json:"items"`
}