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

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

最終更新日:Mar 12, 2026

Service Mesh (ASM) は、IstioGateway (apiVersion: istio.alibabacloud.com/v1beta1) という名前のカスタムリソース定義 (CRD) を使用して、ゲートウェイを宣言的に管理します。組み込みのコントローラーがこの CRD の変更を監視し、コントローラーが実行されている Kubernetes クラスター内の対応する Service、Deployment、および ServiceAccount を調整します。

このトピックでは、ASM ゲートウェイの CRD フィールドリファレンス、設定例、および Go 構造体の定義について説明します。

前提条件

Container Service for Kubernetes (ACK) クラスターが ASM インスタンスに追加されていること。詳細については、「ASM インスタンスへのクラスターの追加」をご参照ください。

重要

ASM ゲートウェイは istio-system 名前空間にデプロイしてください。ゲートウェイは起動時にこの名前空間から設定を読み取ります。Istio のバージョンが 1.6 以降の場合、ゲートウェイを別の名前空間にデプロイすると、必要な設定を取得できずに起動に失敗します。

設定例

最小構成のイングレスゲートウェイ

次の YAML は、デフォルトのリソース制限を持つ基本的なイングレスゲートウェイを作成します:

apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
  name: my-ingressgateway
  namespace: istio-system
spec:
  gatewayType: ingress
  clusterIds:
    - <your-cluster-id>
  ports:
    - name: http2
      port: 80
      targetPort: 80
    - name: https
      port: 443
      targetPort: 443
  replicaCount: 1
  serviceType: LoadBalancer
  serviceAnnotations:
    service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet

<your-cluster-id> を、ご利用の ASM インスタンスによって管理されているクラスターの実際の ID に置き換えてください。

完全なイングレスゲートウェイ

この例には、環境変数、Pod ラベル、リソース制限、ローリングアップデート設定、クラスターごとのオーバーライドなどのオプションフィールドが含まれています:

YAML ファイルを表示

apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
  name: myexample-customingressgateway
  namespace: istio-system
spec:
  clusterIds:
    - <cluster-id-1>
    - <cluster-id-2>    # Deploy the gateway across multiple clusters
  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
  # configVolumes:
  # - 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:
    <cluster-id-1>:
      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
    <cluster-id-2>:
      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

Go クライアントを使用してイングレスゲートウェイをプログラムで管理するには、「ASM ゲートウェイの Go 構造体」をご参照ください。

エグレスゲートウェイ

エグレスゲートウェイは、メッシュ内のすべてのアウトバウンドトラフィックをルーティングします。外部ロードバランサーは不要なため、通常 serviceTypeClusterIP に設定されます。

YAML ファイルを表示

apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
  name: egressgateway
  namespace: istio-system
spec:
  autoCreateGatewayYaml: false
  clusterIds:
    - <your-cluster-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

コンソールからのゲートウェイ作成

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

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。

  3. 左側のナビゲーションウィンドウで、[ASM ゲートウェイ] > [イングレスゲートウェイ] (または [エグレスゲートウェイ]) を選択します。

  4. [YAML から作成] をクリックします。

  5. [作成] ページで、[名前] フィールドに名前を入力し、[名前空間] ドロップダウンリストから [istio-system] を選択し、YAML 設定を貼り付けてから [作成] をクリックします。

ゲートウェイの確認

ゲートウェイを作成した後、Service と Pod が実行中であることを確認します。

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

  2. クラスター名をクリックします。左側のペインで、[ネットワーク] > [サービス] を選択します。

  3. [名前空間] ドロップダウンリストから [istio-system] を選択し、ゲートウェイ Service が存在することを確認します。

  4. 左側のペインで、[ワークロード] > [Pod] を選択します。[名前空間] ドロップダウンリストから [istio-system] を選択し、ゲートウェイ Pod が実行中であることを確認します。

CRD フィールドリファレンス

主要フィールド

フィールドタイプ説明デフォルト
metadata.namestringASM ゲートウェイの名前。生成される Kubernetes Service と Deployment は、どちらも istio-{metadata.name} という名前になります。なし
metadata.namespacestringASM ゲートウェイの名前空間。生成される Service と Deployment はこの名前空間に配置されます。
重要

Istio 1.6 以降では istio-system である必要があります。

istio-system
gatewayTypestringゲートウェイのタイプ。有効な値: ingress (インバウンドトラフィックをルーティング) および egress (アウトバウンドトラフィックをルーティング)。ingress
clusterIdsstring[]ゲートウェイをデプロイするクラスターの ID。各クラスターは、現在の ASM インスタンスによって管理されている必要があります。なし

Service の設定

フィールドタイプ説明デフォルト
serviceType文字列Kubernetes サービスのタイプ。有効な値:LoadBalancerNodePortClusterIP。エグレスゲートウェイでは、通常 ClusterIP に設定します。
重要

登録済みクラスターを使用し、この値を LoadBalancer に設定する場合、クラスターが LoadBalancer サービスをサポートしている必要があります。

LoadBalancer
loadBalancerClass文字列サービスの loadBalancerClassserviceTypeLoadBalancer の場合にのみ有効です。ASM v1.18 以降が必要です。詳細については、「NLB インスタンスをイングレスゲートウェイに関連付ける」をご参照ください。None
externalTrafficPolicy文字列インバウンドトラフィックをノードローカルのエンドポイントにルーティングするか、クラスター全体のエンドポイントにルーティングするかを決定します。有効な値:ClusterLocal。イングレスゲートウェイにのみ適用されます。Cluster
serviceAnnotationsmap[string]stringゲートウェイサービスに付与されるアノテーション。serviceTypeLoadBalancer に設定されたゲートウェイにのみ適用されます。エグレスゲートウェイでは通常設定しません。一般的なアノテーションについては、「アノテーションを使用して負荷分散を設定する」をご参照ください。None
serviceLabelsmap[string]stringゲートウェイサービスに付与されるラベル。None
portsServicePort[]ゲートウェイによって公開されるサービスポート。各エントリには nameporttargetPort、およびオプションで protocol が含まれます。
説明

v1.9.7.107 より前のバージョンでは、protocolTCP に設定してください。

None

Pod の設定

フィールドタイプ説明デフォルト
replicaCountint32Pod レプリカの数。1
resourcesResourceRequirementsCPU とメモリのリソースリクエストおよびリミット。リミット: cpu 2、メモリ 2G。リクエスト: cpu 200m、メモリ 256Mi
envEnvVar[]ゲートウェイコンテナに挿入される環境変数。なし
podLabelsmap[string]stringゲートウェイ Pod のラベル。なし
podAnnotationsmap[string]stringゲートウェイ Pod のアノテーション。なし
nodeSelectormap[string]stringゲートウェイ Pod を特定のノードにスケジュールするために使用されるノードラベル。なし
affinityAffinityゲートウェイ Pod をスケジューリングするためのノードアフィニティルール。詳細については、Kubernetes ドキュメントの「Affinity and anti-affinity」をご参照ください。なし
tolerationsToleration[]ゲートウェイ Pod が一致する Taint を持つノードにスケジューリングされることを許可する Toleration。詳細については、Kubernetes ドキュメントの「Taints and Tolerations」をご参照ください。なし
hostNetworkboolゲートウェイ Pod がホストのネットワーク名前空間を共有するかどうか。false
dnsPolicystringゲートウェイ Pod の DNS ポリシー。詳細については、Kubernetes ドキュメントの「DNS for Services and Pods」をご参照ください。ClusterFirst
runAsRootboolゲートウェイコンテナが root として実行されるかどうか。false
readinessProbeReadinessProbeConfigurationゲートウェイ Pod の Readiness プローブ設定。なし

Deployment の設定

フィールドタイプ説明デフォルト
rollingMaxSurgestringローリングアップデート中に、望ましいレプリカ数を超えることができる Pod の最大数。絶対値またはパーセンテージで指定します。"100%"
rollingMaxUnavailablestringローリングアップデート中に、利用不可になる可能性がある Pod の最大数。絶対値またはパーセンテージで指定します。"25%"

ボリュームマウント

フィールドタイプ説明デフォルト
configVolumesConfigVolume[]ゲートウェイ Pod にマウントされる ConfigMap ボリューム。各エントリには nameconfigMapName、および mountPath が含まれます。なし
secretVolumesSecretVolume[]ゲートウェイ Pod にマウントされる Secret ボリューム。各エントリには namesecretName、および mountPath が含まれます。なし

ConfigMap ボリュームの例:

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

Secret ボリュームの例:

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

Horizontal Pod Autoscaling (HPA)

フィールドタイプ説明デフォルト
cpu.targetAverageUtilizationint32目標 CPU 使用率 (1〜100)。使用率がこのしきい値を超えると、HPA はスケールアップします。使用率が下回ると、HPA はスケールダウンします。なし
memory.targetAverageUtilizationint32目標メモリ使用率 (1〜100)。CPU と同じスケーリング動作に従います。なし
maxReplicasint32HPA がスケールアップできるレプリカの最大数。正の整数である必要があります。なし
minReplicasint32HPA がスケールダウンできるレプリカの最小数。正の整数である必要があります (最小値: 1)。なし

クラスターごとのオーバーライド

overrides フィールドを使用して、clusterIds に 2 つ以上のクラスターが含まれている場合にクラスターごとに異なる設定を適用します。

フィールドタイプ説明デフォルト
overridesmap[string]Configurationキーが clusterIds フィールドのクラスター ID で、値がクラスター固有の設定を含むマップ。なし

以下のフィールドはクラスターごとにオーバーライドできます:

  • serviceAnnotations

  • podAnnotations

  • resources

  • replicaCount

  • HPA 関連フィールド (ASM v1.16 以降)

  • serviceType (ASM v1.16 以降)

例:

overrides:
  cluster1Id:
    replicaCount: 1
    resources:
      limits:
        cpu: '2'
        memory: 2G
    serviceAnnotations:
      service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
  cluster2Id:
    replicaCount: 2
    resources:
      limits:
        cpu: '4'
        memory: 4G

カーネルチューニング

フィールドタイプ説明デフォルト
kernel.enabledboolカスタムカーネルパラメータをゲートウェイ Pod に適用するかどうか。false
kernel.parametersKernelParametersチューニングする Sysctl パラメータ。すべての値は文字列である必要があります。数字は二重引用符で囲んでください (例: net.core.somaxconn: "65535")。なし

サポートされているカーネルパラメータ:

net.core.somaxconnnet.core.netdev_max_backlognet.ipv4.tcp_rmemnet.ipv4.tcp_wmemnet.ipv4.ip_local_port_rangenet.ipv4.tcp_fin_timeoutnet.ipv4.tcp_tw_timeoutnet.ipv4.tcp_tw_reusenet.ipv4.tcp_tw_recyclenet.ipv4.tcp_timestampsnet.ipv4.tcp_retries2net.ipv4.tcp_slow_start_after_idlenet.ipv4.tcp_max_orphansnet.ipv4.tcp_max_syn_backlognet.ipv4.tcp_no_metrics_savenet.ipv4.tcp_autocorkingkernel.printkvm.swappiness

一部のカーネルパラメータは、ホストのカーネルバージョンによっては無効になる場合があります。ゲートウェイ Pod がエラーを報告した場合は、kubectl describe pod を実行して無効なパラメータを特定し、それらを削除してください。

圧縮 (イングレスゲートウェイのみ)

フィールドタイプ説明デフォルト
compression.enabledboolレスポンス圧縮を有効にするかどうか。false
compression.gzipGzipConfigurationGzip 圧縮設定。圧縮を有効にするには必須です。すべてのデフォルト値を使用するには gzip: {} に設定します。なし
compression.content_typestring[]Content-Type ヘッダーで識別される、圧縮対象のコンテントタイプ (例: text/htmlapplication/json)。なし
compression.min_content_lengthuint32Content-Length ヘッダーに基づき、圧縮をトリガーする最小レスポンスボディサイズ (バイト単位)。30
compression.disable_on_etag_headerbooltrue の場合、ETag ヘッダーを含むレスポンスの圧縮を無効にします。false
compression.remove_accept_encoding_headerbooltrue の場合、リクエストをアップストリームサーバーに転送する前に Accept-Encoding ヘッダーを削除します。false

Gzip 設定

フィールドタイプ説明デフォルト
compression.gzip.memory_leveluint32zlib ライブラリのメモリ使用レベル (1〜9)。値が大きいほどメモリ使用量は増えますが、圧縮速度と品質が向上します。5
compression.gzip.compression_levelstringzlib ライブラリの圧縮レベル。有効な値: COMPRESSION_LEVEL_1 から COMPRESSION_LEVEL_9DEFAULT_COMPRESSIONBEST_SPEEDBEST_COMPRESSION。レベル 1 は BEST_SPEED に相当します。レベル 9 は BEST_COMPRESSION に相当します。レベル 6 は DEFAULT_COMPRESSION に相当します。DEFAULT_COMPRESSION
compression.gzip.compression_strategystringzlib ライブラリの圧縮ストラテジー。有効な値: DEFAULT_STRATEGYFILTEREDHUFFMAN_ONLYRLEFIXEDDEFAULT_STRATEGY
compression.gzip.window_bitsuint32zlib ライブラリのウィンドウサイズ (9〜15)。値が大きいほど圧縮率は向上しますが、メモリ使用量が増加します。12
compression.gzip.chunk_sizeuint32zlib ライブラリの出力バッファーサイズ。4096

圧縮ストラテジーの詳細:

ストラテジーユースケース
DEFAULT_STRATEGY汎用圧縮。ほとんどのデータに適しています。
FILTEREDテキストや生成データなど、繰り返しパターンの多いデータ。
HUFFMAN_ONLY高速な展開が優先される静的データ。
RLEビットマップなど、繰り返されるバイトの長いシーケンスを持つデータ。
FIXED圧縮率を犠牲にして、高速な圧縮と展開のために事前定義されたハフマン符号木を使用します。

ローリングリスタートをトリガーするフィールド

以下のいずれかのフィールドを変更すると、ゲートウェイ Pod のローリングリスタートが発生します。本番環境での変更は慎重に計画してください。

フィールド注意
env
portsASM v1.16 以降では、ports の変更はリスタートをトリガーしなくなりました。
configVolumes
resources
secretVolumes
podLabels
podAnnotations
kernel.enabled
kernel.parameters
hostNetwork
dnsPolicy
nodeSelectorリスタートは Pod のスケジューリングに依存します。
affinityリスタートは Pod のスケジューリングに依存します。
tolerationsリスタートは Pod のスケジューリングに依存します。

ASM ゲートウェイの Go 構造体

以下の Go 構造体を使用して、Kubernetes Go クライアントで IstioGateway リソースをプログラムで管理します。

Go 構造体の定義を表示

package v1beta1

import (
    corev1 "k8s.io/api/core/v1"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

type GatewayType string
type ConfigState string

const (
    GatewayTypeIngress GatewayType = "ingress"
    GatewayTypeEgress  GatewayType = "egress"
)

// IstioGatewaySpec は、ASM ゲートウェイの望ましい状態を定義します。
// +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"`
}

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"`
}

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 {
    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"`
}

// IstioGateway は、istiogateways API のスキーマです。
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +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"`
}

// IstioGatewayList は、IstioGateway のリストを含みます。
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type IstioGatewayList struct {
    metav1.TypeMeta `json:",inline"`
    metav1.ListMeta `json:"metadata,omitempty"`
    Items           []IstioGateway `json:"items"`
}