import * as pulumi from "@pulumi/pulumi";
import { input as inputs, output as outputs } from "../types";
export declare namespace networking {
    namespace v1alpha3 {
        /**
         * Configuration affecting load balancing, outlier detection, etc. See more details at: https://istio.io/docs/reference/config/networking/destination-rule.html
         */
        interface DestinationRuleSpecArgs {
            /**
             * A list of namespaces to which this destination rule is exported.
             */
            exportTo?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * The name of a service from the service registry.
             */
            host?: pulumi.Input<string>;
            subsets?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsArgs>[]>;
            trafficPolicy?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyArgs>;
        }
        interface DestinationRuleSpecSubsetsArgs {
            labels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * Name of the subset.
             */
            name?: pulumi.Input<string>;
            /**
             * Traffic policies that apply to this subset.
             */
            trafficPolicy?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyArgs>;
        }
        /**
         * Traffic policies that apply to this subset.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyArgs {
            connectionPool?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolArgs>;
            /**
             * Settings controlling the load balancer algorithms.
             */
            loadBalancer?: any;
            outlierDetection?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyOutlierDetectionArgs>;
            /**
             * Traffic policies specific to individual ports.
             */
            portLevelSettings?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsArgs>[]>;
            /**
             * TLS related settings for connections to the upstream service.
             */
            tls?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyTlsArgs>;
        }
        interface DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolArgs {
            /**
             * HTTP connection pool settings.
             */
            http?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolHttpArgs>;
            /**
             * Settings common to both HTTP and TCP upstream connections.
             */
            tcp?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolTcpArgs>;
        }
        /**
         * HTTP connection pool settings.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolHttpArgs {
            /**
             * Specify if http1.1 connection should be upgraded to http2 for the associated destination.
             */
            h2UpgradePolicy?: pulumi.Input<string>;
            /**
             * Maximum number of pending HTTP requests to a destination.
             */
            http1MaxPendingRequests?: pulumi.Input<number>;
            /**
             * Maximum number of requests to a backend.
             */
            http2MaxRequests?: pulumi.Input<number>;
            /**
             * The idle timeout for upstream connection pool connections.
             */
            idleTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of requests per connection to a backend.
             */
            maxRequestsPerConnection?: pulumi.Input<number>;
            maxRetries?: pulumi.Input<number>;
            /**
             * If set to true, client protocol will be preserved while initiating connection to backend.
             */
            useClientProtocol?: pulumi.Input<boolean>;
        }
        /**
         * Settings common to both HTTP and TCP upstream connections.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolTcpArgs {
            /**
             * TCP connection timeout.
             */
            connectTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of HTTP1 /TCP connections to a destination host.
             */
            maxConnections?: pulumi.Input<number>;
            /**
             * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
             */
            tcpKeepalive?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolTcpTcpKeepaliveArgs>;
        }
        /**
         * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolTcpTcpKeepaliveArgs {
            /**
             * The time duration between keep-alive probes.
             */
            interval?: pulumi.Input<string>;
            probes?: pulumi.Input<number>;
            time?: pulumi.Input<string>;
        }
        interface DestinationRuleSpecSubsetsTrafficPolicyOutlierDetectionArgs {
            /**
             * Minimum ejection duration.
             */
            baseEjectionTime?: pulumi.Input<string>;
            /**
             * Number of 5xx errors before a host is ejected from the connection pool.
             */
            consecutive5xxErrors?: pulumi.Input<number>;
            consecutiveErrors?: pulumi.Input<number>;
            /**
             * Number of gateway errors before a host is ejected from the connection pool.
             */
            consecutiveGatewayErrors?: pulumi.Input<number>;
            consecutiveLocalOriginFailures?: pulumi.Input<number>;
            /**
             * Time interval between ejection sweep analysis.
             */
            interval?: pulumi.Input<string>;
            maxEjectionPercent?: pulumi.Input<number>;
            minHealthPercent?: pulumi.Input<number>;
            /**
             * Determines whether to distinguish local origin failures from external errors.
             */
            splitExternalLocalOriginErrors?: pulumi.Input<boolean>;
        }
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsArgs {
            connectionPool?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolArgs>;
            /**
             * Settings controlling the load balancer algorithms.
             */
            loadBalancer?: any;
            outlierDetection?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsOutlierDetectionArgs>;
            port?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsPortArgs>;
            /**
             * TLS related settings for connections to the upstream service.
             */
            tls?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsTlsArgs>;
        }
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolArgs {
            /**
             * HTTP connection pool settings.
             */
            http?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolHttpArgs>;
            /**
             * Settings common to both HTTP and TCP upstream connections.
             */
            tcp?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolTcpArgs>;
        }
        /**
         * HTTP connection pool settings.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolHttpArgs {
            /**
             * Specify if http1.1 connection should be upgraded to http2 for the associated destination.
             */
            h2UpgradePolicy?: pulumi.Input<string>;
            /**
             * Maximum number of pending HTTP requests to a destination.
             */
            http1MaxPendingRequests?: pulumi.Input<number>;
            /**
             * Maximum number of requests to a backend.
             */
            http2MaxRequests?: pulumi.Input<number>;
            /**
             * The idle timeout for upstream connection pool connections.
             */
            idleTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of requests per connection to a backend.
             */
            maxRequestsPerConnection?: pulumi.Input<number>;
            maxRetries?: pulumi.Input<number>;
            /**
             * If set to true, client protocol will be preserved while initiating connection to backend.
             */
            useClientProtocol?: pulumi.Input<boolean>;
        }
        /**
         * Settings common to both HTTP and TCP upstream connections.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolTcpArgs {
            /**
             * TCP connection timeout.
             */
            connectTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of HTTP1 /TCP connections to a destination host.
             */
            maxConnections?: pulumi.Input<number>;
            /**
             * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
             */
            tcpKeepalive?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolTcpTcpKeepaliveArgs>;
        }
        /**
         * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolTcpTcpKeepaliveArgs {
            /**
             * The time duration between keep-alive probes.
             */
            interval?: pulumi.Input<string>;
            probes?: pulumi.Input<number>;
            time?: pulumi.Input<string>;
        }
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsOutlierDetectionArgs {
            /**
             * Minimum ejection duration.
             */
            baseEjectionTime?: pulumi.Input<string>;
            /**
             * Number of 5xx errors before a host is ejected from the connection pool.
             */
            consecutive5xxErrors?: pulumi.Input<number>;
            consecutiveErrors?: pulumi.Input<number>;
            /**
             * Number of gateway errors before a host is ejected from the connection pool.
             */
            consecutiveGatewayErrors?: pulumi.Input<number>;
            consecutiveLocalOriginFailures?: pulumi.Input<number>;
            /**
             * Time interval between ejection sweep analysis.
             */
            interval?: pulumi.Input<string>;
            maxEjectionPercent?: pulumi.Input<number>;
            minHealthPercent?: pulumi.Input<number>;
            /**
             * Determines whether to distinguish local origin failures from external errors.
             */
            splitExternalLocalOriginErrors?: pulumi.Input<boolean>;
        }
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsPortArgs {
            number?: pulumi.Input<number>;
        }
        /**
         * TLS related settings for connections to the upstream service.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsTlsArgs {
            caCertificates?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            clientCertificate?: pulumi.Input<string>;
            credentialName?: pulumi.Input<string>;
            mode?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            privateKey?: pulumi.Input<string>;
            /**
             * SNI string to present to the server during TLS handshake.
             */
            sni?: pulumi.Input<string>;
            subjectAltNames?: pulumi.Input<pulumi.Input<string>[]>;
        }
        /**
         * TLS related settings for connections to the upstream service.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyTlsArgs {
            caCertificates?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            clientCertificate?: pulumi.Input<string>;
            credentialName?: pulumi.Input<string>;
            mode?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            privateKey?: pulumi.Input<string>;
            /**
             * SNI string to present to the server during TLS handshake.
             */
            sni?: pulumi.Input<string>;
            subjectAltNames?: pulumi.Input<pulumi.Input<string>[]>;
        }
        interface DestinationRuleSpecTrafficPolicyArgs {
            connectionPool?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyConnectionPoolArgs>;
            /**
             * Settings controlling the load balancer algorithms.
             */
            loadBalancer?: any;
            outlierDetection?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyOutlierDetectionArgs>;
            /**
             * Traffic policies specific to individual ports.
             */
            portLevelSettings?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyPortLevelSettingsArgs>[]>;
            /**
             * TLS related settings for connections to the upstream service.
             */
            tls?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyTlsArgs>;
        }
        interface DestinationRuleSpecTrafficPolicyConnectionPoolArgs {
            /**
             * HTTP connection pool settings.
             */
            http?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyConnectionPoolHttpArgs>;
            /**
             * Settings common to both HTTP and TCP upstream connections.
             */
            tcp?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyConnectionPoolTcpArgs>;
        }
        /**
         * HTTP connection pool settings.
         */
        interface DestinationRuleSpecTrafficPolicyConnectionPoolHttpArgs {
            /**
             * Specify if http1.1 connection should be upgraded to http2 for the associated destination.
             */
            h2UpgradePolicy?: pulumi.Input<string>;
            /**
             * Maximum number of pending HTTP requests to a destination.
             */
            http1MaxPendingRequests?: pulumi.Input<number>;
            /**
             * Maximum number of requests to a backend.
             */
            http2MaxRequests?: pulumi.Input<number>;
            /**
             * The idle timeout for upstream connection pool connections.
             */
            idleTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of requests per connection to a backend.
             */
            maxRequestsPerConnection?: pulumi.Input<number>;
            maxRetries?: pulumi.Input<number>;
            /**
             * If set to true, client protocol will be preserved while initiating connection to backend.
             */
            useClientProtocol?: pulumi.Input<boolean>;
        }
        /**
         * Settings common to both HTTP and TCP upstream connections.
         */
        interface DestinationRuleSpecTrafficPolicyConnectionPoolTcpArgs {
            /**
             * TCP connection timeout.
             */
            connectTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of HTTP1 /TCP connections to a destination host.
             */
            maxConnections?: pulumi.Input<number>;
            /**
             * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
             */
            tcpKeepalive?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyConnectionPoolTcpTcpKeepaliveArgs>;
        }
        /**
         * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
         */
        interface DestinationRuleSpecTrafficPolicyConnectionPoolTcpTcpKeepaliveArgs {
            /**
             * The time duration between keep-alive probes.
             */
            interval?: pulumi.Input<string>;
            probes?: pulumi.Input<number>;
            time?: pulumi.Input<string>;
        }
        interface DestinationRuleSpecTrafficPolicyOutlierDetectionArgs {
            /**
             * Minimum ejection duration.
             */
            baseEjectionTime?: pulumi.Input<string>;
            /**
             * Number of 5xx errors before a host is ejected from the connection pool.
             */
            consecutive5xxErrors?: pulumi.Input<number>;
            consecutiveErrors?: pulumi.Input<number>;
            /**
             * Number of gateway errors before a host is ejected from the connection pool.
             */
            consecutiveGatewayErrors?: pulumi.Input<number>;
            consecutiveLocalOriginFailures?: pulumi.Input<number>;
            /**
             * Time interval between ejection sweep analysis.
             */
            interval?: pulumi.Input<string>;
            maxEjectionPercent?: pulumi.Input<number>;
            minHealthPercent?: pulumi.Input<number>;
            /**
             * Determines whether to distinguish local origin failures from external errors.
             */
            splitExternalLocalOriginErrors?: pulumi.Input<boolean>;
        }
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsArgs {
            connectionPool?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolArgs>;
            /**
             * Settings controlling the load balancer algorithms.
             */
            loadBalancer?: any;
            outlierDetection?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyPortLevelSettingsOutlierDetectionArgs>;
            port?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyPortLevelSettingsPortArgs>;
            /**
             * TLS related settings for connections to the upstream service.
             */
            tls?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyPortLevelSettingsTlsArgs>;
        }
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolArgs {
            /**
             * HTTP connection pool settings.
             */
            http?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolHttpArgs>;
            /**
             * Settings common to both HTTP and TCP upstream connections.
             */
            tcp?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolTcpArgs>;
        }
        /**
         * HTTP connection pool settings.
         */
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolHttpArgs {
            /**
             * Specify if http1.1 connection should be upgraded to http2 for the associated destination.
             */
            h2UpgradePolicy?: pulumi.Input<string>;
            /**
             * Maximum number of pending HTTP requests to a destination.
             */
            http1MaxPendingRequests?: pulumi.Input<number>;
            /**
             * Maximum number of requests to a backend.
             */
            http2MaxRequests?: pulumi.Input<number>;
            /**
             * The idle timeout for upstream connection pool connections.
             */
            idleTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of requests per connection to a backend.
             */
            maxRequestsPerConnection?: pulumi.Input<number>;
            maxRetries?: pulumi.Input<number>;
            /**
             * If set to true, client protocol will be preserved while initiating connection to backend.
             */
            useClientProtocol?: pulumi.Input<boolean>;
        }
        /**
         * Settings common to both HTTP and TCP upstream connections.
         */
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolTcpArgs {
            /**
             * TCP connection timeout.
             */
            connectTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of HTTP1 /TCP connections to a destination host.
             */
            maxConnections?: pulumi.Input<number>;
            /**
             * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
             */
            tcpKeepalive?: pulumi.Input<inputs.networking.v1alpha3.DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolTcpTcpKeepaliveArgs>;
        }
        /**
         * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
         */
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolTcpTcpKeepaliveArgs {
            /**
             * The time duration between keep-alive probes.
             */
            interval?: pulumi.Input<string>;
            probes?: pulumi.Input<number>;
            time?: pulumi.Input<string>;
        }
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsOutlierDetectionArgs {
            /**
             * Minimum ejection duration.
             */
            baseEjectionTime?: pulumi.Input<string>;
            /**
             * Number of 5xx errors before a host is ejected from the connection pool.
             */
            consecutive5xxErrors?: pulumi.Input<number>;
            consecutiveErrors?: pulumi.Input<number>;
            /**
             * Number of gateway errors before a host is ejected from the connection pool.
             */
            consecutiveGatewayErrors?: pulumi.Input<number>;
            consecutiveLocalOriginFailures?: pulumi.Input<number>;
            /**
             * Time interval between ejection sweep analysis.
             */
            interval?: pulumi.Input<string>;
            maxEjectionPercent?: pulumi.Input<number>;
            minHealthPercent?: pulumi.Input<number>;
            /**
             * Determines whether to distinguish local origin failures from external errors.
             */
            splitExternalLocalOriginErrors?: pulumi.Input<boolean>;
        }
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsPortArgs {
            number?: pulumi.Input<number>;
        }
        /**
         * TLS related settings for connections to the upstream service.
         */
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsTlsArgs {
            caCertificates?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            clientCertificate?: pulumi.Input<string>;
            credentialName?: pulumi.Input<string>;
            mode?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            privateKey?: pulumi.Input<string>;
            /**
             * SNI string to present to the server during TLS handshake.
             */
            sni?: pulumi.Input<string>;
            subjectAltNames?: pulumi.Input<pulumi.Input<string>[]>;
        }
        /**
         * TLS related settings for connections to the upstream service.
         */
        interface DestinationRuleSpecTrafficPolicyTlsArgs {
            caCertificates?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            clientCertificate?: pulumi.Input<string>;
            credentialName?: pulumi.Input<string>;
            mode?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            privateKey?: pulumi.Input<string>;
            /**
             * SNI string to present to the server during TLS handshake.
             */
            sni?: pulumi.Input<string>;
            subjectAltNames?: pulumi.Input<pulumi.Input<string>[]>;
        }
        /**
         * Customizing Envoy configuration generated by Istio. See more details at: https://istio.io/docs/reference/config/networking/envoy-filter.html
         */
        interface EnvoyFilterSpecArgs {
            /**
             * One or more patches with match conditions.
             */
            configPatches?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.EnvoyFilterSpecConfigPatchesArgs>[]>;
            /**
             * Priority defines the order in which patch sets are applied within a context.
             */
            priority?: pulumi.Input<number>;
            workloadSelector?: pulumi.Input<inputs.networking.v1alpha3.EnvoyFilterSpecWorkloadSelectorArgs>;
        }
        interface EnvoyFilterSpecConfigPatchesArgs {
            applyTo?: pulumi.Input<string>;
            /**
             * Match on listener/route configuration/cluster.
             */
            match?: any;
            /**
             * The patch to apply along with the operation.
             */
            patch?: pulumi.Input<inputs.networking.v1alpha3.EnvoyFilterSpecConfigPatchesPatchArgs>;
        }
        /**
         * The patch to apply along with the operation.
         */
        interface EnvoyFilterSpecConfigPatchesPatchArgs {
            /**
             * Determines the filter insertion order.
             */
            filterClass?: pulumi.Input<string>;
            /**
             * Determines how the patch should be applied.
             */
            operation?: pulumi.Input<string>;
            /**
             * The JSON config of the object being patched.
             */
            value?: pulumi.Input<{
                [key: string]: any;
            }>;
        }
        interface EnvoyFilterSpecWorkloadSelectorArgs {
            labels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        /**
         * Configuration affecting edge load balancer. See more details at: https://istio.io/docs/reference/config/networking/gateway.html
         */
        interface GatewaySpecArgs {
            selector?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * A list of server specifications.
             */
            servers?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.GatewaySpecServersArgs>[]>;
        }
        interface GatewaySpecServersArgs {
            bind?: pulumi.Input<string>;
            defaultEndpoint?: pulumi.Input<string>;
            /**
             * One or more hosts exposed by this gateway.
             */
            hosts?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * An optional name of the server, when set must be unique across all servers.
             */
            name?: pulumi.Input<string>;
            port?: pulumi.Input<inputs.networking.v1alpha3.GatewaySpecServersPortArgs>;
            /**
             * Set of TLS related options that govern the server's behavior.
             */
            tls?: pulumi.Input<inputs.networking.v1alpha3.GatewaySpecServersTlsArgs>;
        }
        interface GatewaySpecServersPortArgs {
            /**
             * Label assigned to the port.
             */
            name?: pulumi.Input<string>;
            /**
             * A valid non-negative integer port number.
             */
            number?: pulumi.Input<number>;
            /**
             * The protocol exposed on the port.
             */
            protocol?: pulumi.Input<string>;
            targetPort?: pulumi.Input<number>;
        }
        /**
         * Set of TLS related options that govern the server's behavior.
         */
        interface GatewaySpecServersTlsArgs {
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            caCertificates?: pulumi.Input<string>;
            /**
             * Optional: If specified, only support the specified cipher list.
             */
            cipherSuites?: pulumi.Input<pulumi.Input<string>[]>;
            credentialName?: pulumi.Input<string>;
            httpsRedirect?: pulumi.Input<boolean>;
            /**
             * Optional: Maximum TLS protocol version.
             */
            maxProtocolVersion?: pulumi.Input<string>;
            /**
             * Optional: Minimum TLS protocol version.
             */
            minProtocolVersion?: pulumi.Input<string>;
            mode?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `SIMPLE` or `MUTUAL`.
             */
            privateKey?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `SIMPLE` or `MUTUAL`.
             */
            serverCertificate?: pulumi.Input<string>;
            subjectAltNames?: pulumi.Input<pulumi.Input<string>[]>;
            verifyCertificateHash?: pulumi.Input<pulumi.Input<string>[]>;
            verifyCertificateSpki?: pulumi.Input<pulumi.Input<string>[]>;
        }
        /**
         * Configuration affecting service registry. See more details at: https://istio.io/docs/reference/config/networking/service-entry.html
         */
        interface ServiceEntrySpecArgs {
            /**
             * The virtual IP addresses associated with the service.
             */
            addresses?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * One or more endpoints associated with the service.
             */
            endpoints?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.ServiceEntrySpecEndpointsArgs>[]>;
            /**
             * A list of namespaces to which this service is exported.
             */
            exportTo?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * The hosts associated with the ServiceEntry.
             */
            hosts?: pulumi.Input<pulumi.Input<string>[]>;
            location?: pulumi.Input<string>;
            /**
             * The ports associated with the external service.
             */
            ports?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.ServiceEntrySpecPortsArgs>[]>;
            /**
             * Service discovery mode for the hosts.
             */
            resolution?: pulumi.Input<string>;
            subjectAltNames?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * Applicable only for MESH_INTERNAL services.
             */
            workloadSelector?: pulumi.Input<inputs.networking.v1alpha3.ServiceEntrySpecWorkloadSelectorArgs>;
        }
        interface ServiceEntrySpecEndpointsArgs {
            address?: pulumi.Input<string>;
            /**
             * One or more labels associated with the endpoint.
             */
            labels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * The locality associated with the endpoint.
             */
            locality?: pulumi.Input<string>;
            network?: pulumi.Input<string>;
            /**
             * Set of ports associated with the endpoint.
             */
            ports?: pulumi.Input<{
                [key: string]: pulumi.Input<number>;
            }>;
            serviceAccount?: pulumi.Input<string>;
            /**
             * The load balancing weight associated with the endpoint.
             */
            weight?: pulumi.Input<number>;
        }
        interface ServiceEntrySpecPortsArgs {
            /**
             * Label assigned to the port.
             */
            name?: pulumi.Input<string>;
            /**
             * A valid non-negative integer port number.
             */
            number?: pulumi.Input<number>;
            /**
             * The protocol exposed on the port.
             */
            protocol?: pulumi.Input<string>;
            targetPort?: pulumi.Input<number>;
        }
        /**
         * Applicable only for MESH_INTERNAL services.
         */
        interface ServiceEntrySpecWorkloadSelectorArgs {
            labels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        /**
         * Configuration affecting network reachability of a sidecar. See more details at: https://istio.io/docs/reference/config/networking/sidecar.html
         */
        interface SidecarSpecArgs {
            egress?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.SidecarSpecEgressArgs>[]>;
            ingress?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.SidecarSpecIngressArgs>[]>;
            /**
             * Configuration for the outbound traffic policy.
             */
            outboundTrafficPolicy?: pulumi.Input<inputs.networking.v1alpha3.SidecarSpecOutboundTrafficPolicyArgs>;
            workloadSelector?: pulumi.Input<inputs.networking.v1alpha3.SidecarSpecWorkloadSelectorArgs>;
        }
        interface SidecarSpecEgressArgs {
            bind?: pulumi.Input<string>;
            captureMode?: pulumi.Input<string>;
            hosts?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * The port associated with the listener.
             */
            port?: pulumi.Input<inputs.networking.v1alpha3.SidecarSpecEgressPortArgs>;
        }
        /**
         * The port associated with the listener.
         */
        interface SidecarSpecEgressPortArgs {
            /**
             * Label assigned to the port.
             */
            name?: pulumi.Input<string>;
            /**
             * A valid non-negative integer port number.
             */
            number?: pulumi.Input<number>;
            /**
             * The protocol exposed on the port.
             */
            protocol?: pulumi.Input<string>;
            targetPort?: pulumi.Input<number>;
        }
        interface SidecarSpecIngressArgs {
            /**
             * The IP to which the listener should be bound.
             */
            bind?: pulumi.Input<string>;
            captureMode?: pulumi.Input<string>;
            defaultEndpoint?: pulumi.Input<string>;
            /**
             * The port associated with the listener.
             */
            port?: pulumi.Input<inputs.networking.v1alpha3.SidecarSpecIngressPortArgs>;
        }
        /**
         * The port associated with the listener.
         */
        interface SidecarSpecIngressPortArgs {
            /**
             * Label assigned to the port.
             */
            name?: pulumi.Input<string>;
            /**
             * A valid non-negative integer port number.
             */
            number?: pulumi.Input<number>;
            /**
             * The protocol exposed on the port.
             */
            protocol?: pulumi.Input<string>;
            targetPort?: pulumi.Input<number>;
        }
        /**
         * Configuration for the outbound traffic policy.
         */
        interface SidecarSpecOutboundTrafficPolicyArgs {
            egressProxy?: pulumi.Input<inputs.networking.v1alpha3.SidecarSpecOutboundTrafficPolicyEgressProxyArgs>;
            mode?: pulumi.Input<string>;
        }
        interface SidecarSpecOutboundTrafficPolicyEgressProxyArgs {
            /**
             * The name of a service from the service registry.
             */
            host?: pulumi.Input<string>;
            /**
             * Specifies the port on the host that is being addressed.
             */
            port?: pulumi.Input<inputs.networking.v1alpha3.SidecarSpecOutboundTrafficPolicyEgressProxyPortArgs>;
            /**
             * The name of a subset within the service.
             */
            subset?: pulumi.Input<string>;
        }
        /**
         * Specifies the port on the host that is being addressed.
         */
        interface SidecarSpecOutboundTrafficPolicyEgressProxyPortArgs {
            number?: pulumi.Input<number>;
        }
        interface SidecarSpecWorkloadSelectorArgs {
            labels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        /**
         * Configuration affecting label/content routing, sni routing, etc. See more details at: https://istio.io/docs/reference/config/networking/virtual-service.html
         */
        interface VirtualServiceSpecArgs {
            /**
             * A list of namespaces to which this virtual service is exported.
             */
            exportTo?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * The names of gateways and sidecars that should apply these routes.
             */
            gateways?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * The destination hosts to which traffic is being sent.
             */
            hosts?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * An ordered list of route rules for HTTP traffic.
             */
            http?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpArgs>[]>;
            /**
             * An ordered list of route rules for opaque TCP traffic.
             */
            tcp?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecTcpArgs>[]>;
            tls?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecTlsArgs>[]>;
        }
        interface VirtualServiceSpecHttpArgs {
            /**
             * Cross-Origin Resource Sharing policy (CORS).
             */
            corsPolicy?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpCorsPolicyArgs>;
            delegate?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpDelegateArgs>;
            /**
             * Fault injection policy to apply on HTTP traffic at the client side.
             */
            fault?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpFaultArgs>;
            headers?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpHeadersArgs>;
            match?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpMatchArgs>[]>;
            mirror?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpMirrorArgs>;
            /**
             * Percentage of the traffic to be mirrored by the `mirror` field.
             */
            mirrorPercent?: pulumi.Input<number>;
            /**
             * Percentage of the traffic to be mirrored by the `mirror` field.
             */
            mirrorPercentage?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpMirrorPercentageArgs>;
            /**
             * Percentage of the traffic to be mirrored by the `mirror` field.
             */
            mirror_percent?: pulumi.Input<number>;
            /**
             * The name assigned to the route for debugging purposes.
             */
            name?: pulumi.Input<string>;
            /**
             * A HTTP rule can either redirect or forward (default) traffic.
             */
            redirect?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpRedirectArgs>;
            /**
             * Retry policy for HTTP requests.
             */
            retries?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpRetriesArgs>;
            /**
             * Rewrite HTTP URIs and Authority headers.
             */
            rewrite?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpRewriteArgs>;
            /**
             * A HTTP rule can either redirect or forward (default) traffic.
             */
            route?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpRouteArgs>[]>;
            /**
             * Timeout for HTTP requests, default is disabled.
             */
            timeout?: pulumi.Input<string>;
        }
        /**
         * Cross-Origin Resource Sharing policy (CORS).
         */
        interface VirtualServiceSpecHttpCorsPolicyArgs {
            allowCredentials?: pulumi.Input<boolean>;
            allowHeaders?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * List of HTTP methods allowed to access the resource.
             */
            allowMethods?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * The list of origins that are allowed to perform CORS requests.
             */
            allowOrigin?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * String patterns that match allowed origins.
             */
            allowOrigins?: pulumi.Input<any[]>;
            exposeHeaders?: pulumi.Input<pulumi.Input<string>[]>;
            maxAge?: pulumi.Input<string>;
        }
        interface VirtualServiceSpecHttpDelegateArgs {
            /**
             * Name specifies the name of the delegate VirtualService.
             */
            name?: pulumi.Input<string>;
            /**
             * Namespace specifies the namespace where the delegate VirtualService resides.
             */
            namespace?: pulumi.Input<string>;
        }
        /**
         * Fault injection policy to apply on HTTP traffic at the client side.
         */
        interface VirtualServiceSpecHttpFaultArgs {
            abort?: any;
            delay?: any;
        }
        interface VirtualServiceSpecHttpHeadersArgs {
            request?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpHeadersRequestArgs>;
            response?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpHeadersResponseArgs>;
        }
        interface VirtualServiceSpecHttpHeadersRequestArgs {
            add?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            remove?: pulumi.Input<pulumi.Input<string>[]>;
            set?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        interface VirtualServiceSpecHttpHeadersResponseArgs {
            add?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            remove?: pulumi.Input<pulumi.Input<string>[]>;
            set?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        interface VirtualServiceSpecHttpMatchArgs {
            authority?: any;
            /**
             * Names of gateways where the rule should be applied.
             */
            gateways?: pulumi.Input<pulumi.Input<string>[]>;
            headers?: pulumi.Input<{
                [key: string]: any;
            }>;
            /**
             * Flag to specify whether the URI matching should be case-insensitive.
             */
            ignoreUriCase?: pulumi.Input<boolean>;
            method?: any;
            /**
             * The name assigned to a match.
             */
            name?: pulumi.Input<string>;
            /**
             * Specifies the ports on the host that is being addressed.
             */
            port?: pulumi.Input<number>;
            /**
             * Query parameters for matching.
             */
            queryParams?: pulumi.Input<{
                [key: string]: any;
            }>;
            scheme?: any;
            sourceLabels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * Source namespace constraining the applicability of a rule to workloads in that namespace.
             */
            sourceNamespace?: pulumi.Input<string>;
            uri?: any;
            /**
             * withoutHeader has the same syntax with the header, but has opposite meaning.
             */
            withoutHeaders?: pulumi.Input<{
                [key: string]: any;
            }>;
        }
        interface VirtualServiceSpecHttpMirrorArgs {
            /**
             * The name of a service from the service registry.
             */
            host?: pulumi.Input<string>;
            /**
             * Specifies the port on the host that is being addressed.
             */
            port?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpMirrorPortArgs>;
            /**
             * The name of a subset within the service.
             */
            subset?: pulumi.Input<string>;
        }
        /**
         * Percentage of the traffic to be mirrored by the `mirror` field.
         */
        interface VirtualServiceSpecHttpMirrorPercentageArgs {
            value?: pulumi.Input<number>;
        }
        /**
         * Specifies the port on the host that is being addressed.
         */
        interface VirtualServiceSpecHttpMirrorPortArgs {
            number?: pulumi.Input<number>;
        }
        /**
         * A HTTP rule can either redirect or forward (default) traffic.
         */
        interface VirtualServiceSpecHttpRedirectArgs {
            authority?: pulumi.Input<string>;
            redirectCode?: pulumi.Input<number>;
            uri?: pulumi.Input<string>;
        }
        /**
         * Retry policy for HTTP requests.
         */
        interface VirtualServiceSpecHttpRetriesArgs {
            /**
             * Number of retries to be allowed for a given request.
             */
            attempts?: pulumi.Input<number>;
            /**
             * Timeout per attempt for a given request, including the initial call and any retries.
             */
            perTryTimeout?: pulumi.Input<string>;
            /**
             * Specifies the conditions under which retry takes place.
             */
            retryOn?: pulumi.Input<string>;
            /**
             * Flag to specify whether the retries should retry to other localities.
             */
            retryRemoteLocalities?: pulumi.Input<boolean>;
        }
        /**
         * Rewrite HTTP URIs and Authority headers.
         */
        interface VirtualServiceSpecHttpRewriteArgs {
            /**
             * rewrite the Authority/Host header with this value.
             */
            authority?: pulumi.Input<string>;
            uri?: pulumi.Input<string>;
        }
        interface VirtualServiceSpecHttpRouteArgs {
            destination?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpRouteDestinationArgs>;
            headers?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpRouteHeadersArgs>;
            weight?: pulumi.Input<number>;
        }
        interface VirtualServiceSpecHttpRouteDestinationArgs {
            /**
             * The name of a service from the service registry.
             */
            host?: pulumi.Input<string>;
            /**
             * Specifies the port on the host that is being addressed.
             */
            port?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpRouteDestinationPortArgs>;
            /**
             * The name of a subset within the service.
             */
            subset?: pulumi.Input<string>;
        }
        /**
         * Specifies the port on the host that is being addressed.
         */
        interface VirtualServiceSpecHttpRouteDestinationPortArgs {
            number?: pulumi.Input<number>;
        }
        interface VirtualServiceSpecHttpRouteHeadersArgs {
            request?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpRouteHeadersRequestArgs>;
            response?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecHttpRouteHeadersResponseArgs>;
        }
        interface VirtualServiceSpecHttpRouteHeadersRequestArgs {
            add?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            remove?: pulumi.Input<pulumi.Input<string>[]>;
            set?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        interface VirtualServiceSpecHttpRouteHeadersResponseArgs {
            add?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            remove?: pulumi.Input<pulumi.Input<string>[]>;
            set?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        interface VirtualServiceSpecTcpArgs {
            match?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecTcpMatchArgs>[]>;
            /**
             * The destination to which the connection should be forwarded to.
             */
            route?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecTcpRouteArgs>[]>;
        }
        interface VirtualServiceSpecTcpMatchArgs {
            /**
             * IPv4 or IPv6 ip addresses of destination with optional subnet.
             */
            destinationSubnets?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * Names of gateways where the rule should be applied.
             */
            gateways?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * Specifies the port on the host that is being addressed.
             */
            port?: pulumi.Input<number>;
            sourceLabels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * Source namespace constraining the applicability of a rule to workloads in that namespace.
             */
            sourceNamespace?: pulumi.Input<string>;
            /**
             * IPv4 or IPv6 ip address of source with optional subnet.
             */
            sourceSubnet?: pulumi.Input<string>;
        }
        interface VirtualServiceSpecTcpRouteArgs {
            destination?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecTcpRouteDestinationArgs>;
            weight?: pulumi.Input<number>;
        }
        interface VirtualServiceSpecTcpRouteDestinationArgs {
            /**
             * The name of a service from the service registry.
             */
            host?: pulumi.Input<string>;
            /**
             * Specifies the port on the host that is being addressed.
             */
            port?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecTcpRouteDestinationPortArgs>;
            /**
             * The name of a subset within the service.
             */
            subset?: pulumi.Input<string>;
        }
        /**
         * Specifies the port on the host that is being addressed.
         */
        interface VirtualServiceSpecTcpRouteDestinationPortArgs {
            number?: pulumi.Input<number>;
        }
        interface VirtualServiceSpecTlsArgs {
            match?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecTlsMatchArgs>[]>;
            /**
             * The destination to which the connection should be forwarded to.
             */
            route?: pulumi.Input<pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecTlsRouteArgs>[]>;
        }
        interface VirtualServiceSpecTlsMatchArgs {
            /**
             * IPv4 or IPv6 ip addresses of destination with optional subnet.
             */
            destinationSubnets?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * Names of gateways where the rule should be applied.
             */
            gateways?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * Specifies the port on the host that is being addressed.
             */
            port?: pulumi.Input<number>;
            /**
             * SNI (server name indicator) to match on.
             */
            sniHosts?: pulumi.Input<pulumi.Input<string>[]>;
            sourceLabels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * Source namespace constraining the applicability of a rule to workloads in that namespace.
             */
            sourceNamespace?: pulumi.Input<string>;
        }
        interface VirtualServiceSpecTlsRouteArgs {
            destination?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecTlsRouteDestinationArgs>;
            weight?: pulumi.Input<number>;
        }
        interface VirtualServiceSpecTlsRouteDestinationArgs {
            /**
             * The name of a service from the service registry.
             */
            host?: pulumi.Input<string>;
            /**
             * Specifies the port on the host that is being addressed.
             */
            port?: pulumi.Input<inputs.networking.v1alpha3.VirtualServiceSpecTlsRouteDestinationPortArgs>;
            /**
             * The name of a subset within the service.
             */
            subset?: pulumi.Input<string>;
        }
        /**
         * Specifies the port on the host that is being addressed.
         */
        interface VirtualServiceSpecTlsRouteDestinationPortArgs {
            number?: pulumi.Input<number>;
        }
        /**
         * Configuration affecting VMs onboarded into the mesh. See more details at: https://istio.io/docs/reference/config/networking/workload-entry.html
         */
        interface WorkloadEntrySpecArgs {
            address?: pulumi.Input<string>;
            /**
             * One or more labels associated with the endpoint.
             */
            labels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * The locality associated with the endpoint.
             */
            locality?: pulumi.Input<string>;
            network?: pulumi.Input<string>;
            /**
             * Set of ports associated with the endpoint.
             */
            ports?: pulumi.Input<{
                [key: string]: pulumi.Input<number>;
            }>;
            serviceAccount?: pulumi.Input<string>;
            /**
             * The load balancing weight associated with the endpoint.
             */
            weight?: pulumi.Input<number>;
        }
        /**
         * Describes a collection of workload instances. See more details at: https://istio.io/docs/reference/config/networking/workload-group.html
         */
        interface WorkloadGroupSpecArgs {
            /**
             * Metadata that will be used for all corresponding `WorkloadEntries`.
             */
            metadata?: pulumi.Input<inputs.networking.v1alpha3.WorkloadGroupSpecMetadataArgs>;
            /**
             * `ReadinessProbe` describes the configuration the user must provide for healthchecking on their workload.
             */
            probe?: any;
            /**
             * Template to be used for the generation of `WorkloadEntry` resources that belong to this `WorkloadGroup`.
             */
            template?: pulumi.Input<inputs.networking.v1alpha3.WorkloadGroupSpecTemplateArgs>;
        }
        /**
         * Metadata that will be used for all corresponding `WorkloadEntries`.
         */
        interface WorkloadGroupSpecMetadataArgs {
            annotations?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            labels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        /**
         * Template to be used for the generation of `WorkloadEntry` resources that belong to this `WorkloadGroup`.
         */
        interface WorkloadGroupSpecTemplateArgs {
            address?: pulumi.Input<string>;
            /**
             * One or more labels associated with the endpoint.
             */
            labels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * The locality associated with the endpoint.
             */
            locality?: pulumi.Input<string>;
            network?: pulumi.Input<string>;
            /**
             * Set of ports associated with the endpoint.
             */
            ports?: pulumi.Input<{
                [key: string]: pulumi.Input<number>;
            }>;
            serviceAccount?: pulumi.Input<string>;
            /**
             * The load balancing weight associated with the endpoint.
             */
            weight?: pulumi.Input<number>;
        }
    }
    namespace v1beta1 {
        /**
         * Configuration affecting load balancing, outlier detection, etc. See more details at: https://istio.io/docs/reference/config/networking/destination-rule.html
         */
        interface DestinationRuleSpecArgs {
            /**
             * A list of namespaces to which this destination rule is exported.
             */
            exportTo?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * The name of a service from the service registry.
             */
            host?: pulumi.Input<string>;
            subsets?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsArgs>[]>;
            trafficPolicy?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyArgs>;
        }
        interface DestinationRuleSpecSubsetsArgs {
            labels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * Name of the subset.
             */
            name?: pulumi.Input<string>;
            /**
             * Traffic policies that apply to this subset.
             */
            trafficPolicy?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyArgs>;
        }
        /**
         * Traffic policies that apply to this subset.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyArgs {
            connectionPool?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolArgs>;
            /**
             * Settings controlling the load balancer algorithms.
             */
            loadBalancer?: any;
            outlierDetection?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyOutlierDetectionArgs>;
            /**
             * Traffic policies specific to individual ports.
             */
            portLevelSettings?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsArgs>[]>;
            /**
             * TLS related settings for connections to the upstream service.
             */
            tls?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyTlsArgs>;
        }
        interface DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolArgs {
            /**
             * HTTP connection pool settings.
             */
            http?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolHttpArgs>;
            /**
             * Settings common to both HTTP and TCP upstream connections.
             */
            tcp?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolTcpArgs>;
        }
        /**
         * HTTP connection pool settings.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolHttpArgs {
            /**
             * Specify if http1.1 connection should be upgraded to http2 for the associated destination.
             */
            h2UpgradePolicy?: pulumi.Input<string>;
            /**
             * Maximum number of pending HTTP requests to a destination.
             */
            http1MaxPendingRequests?: pulumi.Input<number>;
            /**
             * Maximum number of requests to a backend.
             */
            http2MaxRequests?: pulumi.Input<number>;
            /**
             * The idle timeout for upstream connection pool connections.
             */
            idleTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of requests per connection to a backend.
             */
            maxRequestsPerConnection?: pulumi.Input<number>;
            maxRetries?: pulumi.Input<number>;
            /**
             * If set to true, client protocol will be preserved while initiating connection to backend.
             */
            useClientProtocol?: pulumi.Input<boolean>;
        }
        /**
         * Settings common to both HTTP and TCP upstream connections.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolTcpArgs {
            /**
             * TCP connection timeout.
             */
            connectTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of HTTP1 /TCP connections to a destination host.
             */
            maxConnections?: pulumi.Input<number>;
            /**
             * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
             */
            tcpKeepalive?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolTcpTcpKeepaliveArgs>;
        }
        /**
         * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyConnectionPoolTcpTcpKeepaliveArgs {
            /**
             * The time duration between keep-alive probes.
             */
            interval?: pulumi.Input<string>;
            probes?: pulumi.Input<number>;
            time?: pulumi.Input<string>;
        }
        interface DestinationRuleSpecSubsetsTrafficPolicyOutlierDetectionArgs {
            /**
             * Minimum ejection duration.
             */
            baseEjectionTime?: pulumi.Input<string>;
            /**
             * Number of 5xx errors before a host is ejected from the connection pool.
             */
            consecutive5xxErrors?: pulumi.Input<number>;
            consecutiveErrors?: pulumi.Input<number>;
            /**
             * Number of gateway errors before a host is ejected from the connection pool.
             */
            consecutiveGatewayErrors?: pulumi.Input<number>;
            consecutiveLocalOriginFailures?: pulumi.Input<number>;
            /**
             * Time interval between ejection sweep analysis.
             */
            interval?: pulumi.Input<string>;
            maxEjectionPercent?: pulumi.Input<number>;
            minHealthPercent?: pulumi.Input<number>;
            /**
             * Determines whether to distinguish local origin failures from external errors.
             */
            splitExternalLocalOriginErrors?: pulumi.Input<boolean>;
        }
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsArgs {
            connectionPool?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolArgs>;
            /**
             * Settings controlling the load balancer algorithms.
             */
            loadBalancer?: any;
            outlierDetection?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsOutlierDetectionArgs>;
            port?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsPortArgs>;
            /**
             * TLS related settings for connections to the upstream service.
             */
            tls?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsTlsArgs>;
        }
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolArgs {
            /**
             * HTTP connection pool settings.
             */
            http?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolHttpArgs>;
            /**
             * Settings common to both HTTP and TCP upstream connections.
             */
            tcp?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolTcpArgs>;
        }
        /**
         * HTTP connection pool settings.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolHttpArgs {
            /**
             * Specify if http1.1 connection should be upgraded to http2 for the associated destination.
             */
            h2UpgradePolicy?: pulumi.Input<string>;
            /**
             * Maximum number of pending HTTP requests to a destination.
             */
            http1MaxPendingRequests?: pulumi.Input<number>;
            /**
             * Maximum number of requests to a backend.
             */
            http2MaxRequests?: pulumi.Input<number>;
            /**
             * The idle timeout for upstream connection pool connections.
             */
            idleTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of requests per connection to a backend.
             */
            maxRequestsPerConnection?: pulumi.Input<number>;
            maxRetries?: pulumi.Input<number>;
            /**
             * If set to true, client protocol will be preserved while initiating connection to backend.
             */
            useClientProtocol?: pulumi.Input<boolean>;
        }
        /**
         * Settings common to both HTTP and TCP upstream connections.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolTcpArgs {
            /**
             * TCP connection timeout.
             */
            connectTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of HTTP1 /TCP connections to a destination host.
             */
            maxConnections?: pulumi.Input<number>;
            /**
             * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
             */
            tcpKeepalive?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolTcpTcpKeepaliveArgs>;
        }
        /**
         * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsConnectionPoolTcpTcpKeepaliveArgs {
            /**
             * The time duration between keep-alive probes.
             */
            interval?: pulumi.Input<string>;
            probes?: pulumi.Input<number>;
            time?: pulumi.Input<string>;
        }
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsOutlierDetectionArgs {
            /**
             * Minimum ejection duration.
             */
            baseEjectionTime?: pulumi.Input<string>;
            /**
             * Number of 5xx errors before a host is ejected from the connection pool.
             */
            consecutive5xxErrors?: pulumi.Input<number>;
            consecutiveErrors?: pulumi.Input<number>;
            /**
             * Number of gateway errors before a host is ejected from the connection pool.
             */
            consecutiveGatewayErrors?: pulumi.Input<number>;
            consecutiveLocalOriginFailures?: pulumi.Input<number>;
            /**
             * Time interval between ejection sweep analysis.
             */
            interval?: pulumi.Input<string>;
            maxEjectionPercent?: pulumi.Input<number>;
            minHealthPercent?: pulumi.Input<number>;
            /**
             * Determines whether to distinguish local origin failures from external errors.
             */
            splitExternalLocalOriginErrors?: pulumi.Input<boolean>;
        }
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsPortArgs {
            number?: pulumi.Input<number>;
        }
        /**
         * TLS related settings for connections to the upstream service.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyPortLevelSettingsTlsArgs {
            caCertificates?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            clientCertificate?: pulumi.Input<string>;
            credentialName?: pulumi.Input<string>;
            mode?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            privateKey?: pulumi.Input<string>;
            /**
             * SNI string to present to the server during TLS handshake.
             */
            sni?: pulumi.Input<string>;
            subjectAltNames?: pulumi.Input<pulumi.Input<string>[]>;
        }
        /**
         * TLS related settings for connections to the upstream service.
         */
        interface DestinationRuleSpecSubsetsTrafficPolicyTlsArgs {
            caCertificates?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            clientCertificate?: pulumi.Input<string>;
            credentialName?: pulumi.Input<string>;
            mode?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            privateKey?: pulumi.Input<string>;
            /**
             * SNI string to present to the server during TLS handshake.
             */
            sni?: pulumi.Input<string>;
            subjectAltNames?: pulumi.Input<pulumi.Input<string>[]>;
        }
        interface DestinationRuleSpecTrafficPolicyArgs {
            connectionPool?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyConnectionPoolArgs>;
            /**
             * Settings controlling the load balancer algorithms.
             */
            loadBalancer?: any;
            outlierDetection?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyOutlierDetectionArgs>;
            /**
             * Traffic policies specific to individual ports.
             */
            portLevelSettings?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyPortLevelSettingsArgs>[]>;
            /**
             * TLS related settings for connections to the upstream service.
             */
            tls?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyTlsArgs>;
        }
        interface DestinationRuleSpecTrafficPolicyConnectionPoolArgs {
            /**
             * HTTP connection pool settings.
             */
            http?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyConnectionPoolHttpArgs>;
            /**
             * Settings common to both HTTP and TCP upstream connections.
             */
            tcp?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyConnectionPoolTcpArgs>;
        }
        /**
         * HTTP connection pool settings.
         */
        interface DestinationRuleSpecTrafficPolicyConnectionPoolHttpArgs {
            /**
             * Specify if http1.1 connection should be upgraded to http2 for the associated destination.
             */
            h2UpgradePolicy?: pulumi.Input<string>;
            /**
             * Maximum number of pending HTTP requests to a destination.
             */
            http1MaxPendingRequests?: pulumi.Input<number>;
            /**
             * Maximum number of requests to a backend.
             */
            http2MaxRequests?: pulumi.Input<number>;
            /**
             * The idle timeout for upstream connection pool connections.
             */
            idleTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of requests per connection to a backend.
             */
            maxRequestsPerConnection?: pulumi.Input<number>;
            maxRetries?: pulumi.Input<number>;
            /**
             * If set to true, client protocol will be preserved while initiating connection to backend.
             */
            useClientProtocol?: pulumi.Input<boolean>;
        }
        /**
         * Settings common to both HTTP and TCP upstream connections.
         */
        interface DestinationRuleSpecTrafficPolicyConnectionPoolTcpArgs {
            /**
             * TCP connection timeout.
             */
            connectTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of HTTP1 /TCP connections to a destination host.
             */
            maxConnections?: pulumi.Input<number>;
            /**
             * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
             */
            tcpKeepalive?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyConnectionPoolTcpTcpKeepaliveArgs>;
        }
        /**
         * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
         */
        interface DestinationRuleSpecTrafficPolicyConnectionPoolTcpTcpKeepaliveArgs {
            /**
             * The time duration between keep-alive probes.
             */
            interval?: pulumi.Input<string>;
            probes?: pulumi.Input<number>;
            time?: pulumi.Input<string>;
        }
        interface DestinationRuleSpecTrafficPolicyOutlierDetectionArgs {
            /**
             * Minimum ejection duration.
             */
            baseEjectionTime?: pulumi.Input<string>;
            /**
             * Number of 5xx errors before a host is ejected from the connection pool.
             */
            consecutive5xxErrors?: pulumi.Input<number>;
            consecutiveErrors?: pulumi.Input<number>;
            /**
             * Number of gateway errors before a host is ejected from the connection pool.
             */
            consecutiveGatewayErrors?: pulumi.Input<number>;
            consecutiveLocalOriginFailures?: pulumi.Input<number>;
            /**
             * Time interval between ejection sweep analysis.
             */
            interval?: pulumi.Input<string>;
            maxEjectionPercent?: pulumi.Input<number>;
            minHealthPercent?: pulumi.Input<number>;
            /**
             * Determines whether to distinguish local origin failures from external errors.
             */
            splitExternalLocalOriginErrors?: pulumi.Input<boolean>;
        }
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsArgs {
            connectionPool?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolArgs>;
            /**
             * Settings controlling the load balancer algorithms.
             */
            loadBalancer?: any;
            outlierDetection?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyPortLevelSettingsOutlierDetectionArgs>;
            port?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyPortLevelSettingsPortArgs>;
            /**
             * TLS related settings for connections to the upstream service.
             */
            tls?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyPortLevelSettingsTlsArgs>;
        }
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolArgs {
            /**
             * HTTP connection pool settings.
             */
            http?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolHttpArgs>;
            /**
             * Settings common to both HTTP and TCP upstream connections.
             */
            tcp?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolTcpArgs>;
        }
        /**
         * HTTP connection pool settings.
         */
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolHttpArgs {
            /**
             * Specify if http1.1 connection should be upgraded to http2 for the associated destination.
             */
            h2UpgradePolicy?: pulumi.Input<string>;
            /**
             * Maximum number of pending HTTP requests to a destination.
             */
            http1MaxPendingRequests?: pulumi.Input<number>;
            /**
             * Maximum number of requests to a backend.
             */
            http2MaxRequests?: pulumi.Input<number>;
            /**
             * The idle timeout for upstream connection pool connections.
             */
            idleTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of requests per connection to a backend.
             */
            maxRequestsPerConnection?: pulumi.Input<number>;
            maxRetries?: pulumi.Input<number>;
            /**
             * If set to true, client protocol will be preserved while initiating connection to backend.
             */
            useClientProtocol?: pulumi.Input<boolean>;
        }
        /**
         * Settings common to both HTTP and TCP upstream connections.
         */
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolTcpArgs {
            /**
             * TCP connection timeout.
             */
            connectTimeout?: pulumi.Input<string>;
            /**
             * Maximum number of HTTP1 /TCP connections to a destination host.
             */
            maxConnections?: pulumi.Input<number>;
            /**
             * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
             */
            tcpKeepalive?: pulumi.Input<inputs.networking.v1beta1.DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolTcpTcpKeepaliveArgs>;
        }
        /**
         * If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
         */
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsConnectionPoolTcpTcpKeepaliveArgs {
            /**
             * The time duration between keep-alive probes.
             */
            interval?: pulumi.Input<string>;
            probes?: pulumi.Input<number>;
            time?: pulumi.Input<string>;
        }
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsOutlierDetectionArgs {
            /**
             * Minimum ejection duration.
             */
            baseEjectionTime?: pulumi.Input<string>;
            /**
             * Number of 5xx errors before a host is ejected from the connection pool.
             */
            consecutive5xxErrors?: pulumi.Input<number>;
            consecutiveErrors?: pulumi.Input<number>;
            /**
             * Number of gateway errors before a host is ejected from the connection pool.
             */
            consecutiveGatewayErrors?: pulumi.Input<number>;
            consecutiveLocalOriginFailures?: pulumi.Input<number>;
            /**
             * Time interval between ejection sweep analysis.
             */
            interval?: pulumi.Input<string>;
            maxEjectionPercent?: pulumi.Input<number>;
            minHealthPercent?: pulumi.Input<number>;
            /**
             * Determines whether to distinguish local origin failures from external errors.
             */
            splitExternalLocalOriginErrors?: pulumi.Input<boolean>;
        }
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsPortArgs {
            number?: pulumi.Input<number>;
        }
        /**
         * TLS related settings for connections to the upstream service.
         */
        interface DestinationRuleSpecTrafficPolicyPortLevelSettingsTlsArgs {
            caCertificates?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            clientCertificate?: pulumi.Input<string>;
            credentialName?: pulumi.Input<string>;
            mode?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            privateKey?: pulumi.Input<string>;
            /**
             * SNI string to present to the server during TLS handshake.
             */
            sni?: pulumi.Input<string>;
            subjectAltNames?: pulumi.Input<pulumi.Input<string>[]>;
        }
        /**
         * TLS related settings for connections to the upstream service.
         */
        interface DestinationRuleSpecTrafficPolicyTlsArgs {
            caCertificates?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            clientCertificate?: pulumi.Input<string>;
            credentialName?: pulumi.Input<string>;
            mode?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            privateKey?: pulumi.Input<string>;
            /**
             * SNI string to present to the server during TLS handshake.
             */
            sni?: pulumi.Input<string>;
            subjectAltNames?: pulumi.Input<pulumi.Input<string>[]>;
        }
        /**
         * Configuration affecting edge load balancer. See more details at: https://istio.io/docs/reference/config/networking/gateway.html
         */
        interface GatewaySpecArgs {
            selector?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * A list of server specifications.
             */
            servers?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.GatewaySpecServersArgs>[]>;
        }
        interface GatewaySpecServersArgs {
            bind?: pulumi.Input<string>;
            defaultEndpoint?: pulumi.Input<string>;
            /**
             * One or more hosts exposed by this gateway.
             */
            hosts?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * An optional name of the server, when set must be unique across all servers.
             */
            name?: pulumi.Input<string>;
            port?: pulumi.Input<inputs.networking.v1beta1.GatewaySpecServersPortArgs>;
            /**
             * Set of TLS related options that govern the server's behavior.
             */
            tls?: pulumi.Input<inputs.networking.v1beta1.GatewaySpecServersTlsArgs>;
        }
        interface GatewaySpecServersPortArgs {
            /**
             * Label assigned to the port.
             */
            name?: pulumi.Input<string>;
            /**
             * A valid non-negative integer port number.
             */
            number?: pulumi.Input<number>;
            /**
             * The protocol exposed on the port.
             */
            protocol?: pulumi.Input<string>;
            targetPort?: pulumi.Input<number>;
        }
        /**
         * Set of TLS related options that govern the server's behavior.
         */
        interface GatewaySpecServersTlsArgs {
            /**
             * REQUIRED if mode is `MUTUAL`.
             */
            caCertificates?: pulumi.Input<string>;
            /**
             * Optional: If specified, only support the specified cipher list.
             */
            cipherSuites?: pulumi.Input<pulumi.Input<string>[]>;
            credentialName?: pulumi.Input<string>;
            httpsRedirect?: pulumi.Input<boolean>;
            /**
             * Optional: Maximum TLS protocol version.
             */
            maxProtocolVersion?: pulumi.Input<string>;
            /**
             * Optional: Minimum TLS protocol version.
             */
            minProtocolVersion?: pulumi.Input<string>;
            mode?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `SIMPLE` or `MUTUAL`.
             */
            privateKey?: pulumi.Input<string>;
            /**
             * REQUIRED if mode is `SIMPLE` or `MUTUAL`.
             */
            serverCertificate?: pulumi.Input<string>;
            subjectAltNames?: pulumi.Input<pulumi.Input<string>[]>;
            verifyCertificateHash?: pulumi.Input<pulumi.Input<string>[]>;
            verifyCertificateSpki?: pulumi.Input<pulumi.Input<string>[]>;
        }
        /**
         * Configuration affecting service registry. See more details at: https://istio.io/docs/reference/config/networking/service-entry.html
         */
        interface ServiceEntrySpecArgs {
            /**
             * The virtual IP addresses associated with the service.
             */
            addresses?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * One or more endpoints associated with the service.
             */
            endpoints?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.ServiceEntrySpecEndpointsArgs>[]>;
            /**
             * A list of namespaces to which this service is exported.
             */
            exportTo?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * The hosts associated with the ServiceEntry.
             */
            hosts?: pulumi.Input<pulumi.Input<string>[]>;
            location?: pulumi.Input<string>;
            /**
             * The ports associated with the external service.
             */
            ports?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.ServiceEntrySpecPortsArgs>[]>;
            /**
             * Service discovery mode for the hosts.
             */
            resolution?: pulumi.Input<string>;
            subjectAltNames?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * Applicable only for MESH_INTERNAL services.
             */
            workloadSelector?: pulumi.Input<inputs.networking.v1beta1.ServiceEntrySpecWorkloadSelectorArgs>;
        }
        interface ServiceEntrySpecEndpointsArgs {
            address?: pulumi.Input<string>;
            /**
             * One or more labels associated with the endpoint.
             */
            labels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * The locality associated with the endpoint.
             */
            locality?: pulumi.Input<string>;
            network?: pulumi.Input<string>;
            /**
             * Set of ports associated with the endpoint.
             */
            ports?: pulumi.Input<{
                [key: string]: pulumi.Input<number>;
            }>;
            serviceAccount?: pulumi.Input<string>;
            /**
             * The load balancing weight associated with the endpoint.
             */
            weight?: pulumi.Input<number>;
        }
        interface ServiceEntrySpecPortsArgs {
            /**
             * Label assigned to the port.
             */
            name?: pulumi.Input<string>;
            /**
             * A valid non-negative integer port number.
             */
            number?: pulumi.Input<number>;
            /**
             * The protocol exposed on the port.
             */
            protocol?: pulumi.Input<string>;
            targetPort?: pulumi.Input<number>;
        }
        /**
         * Applicable only for MESH_INTERNAL services.
         */
        interface ServiceEntrySpecWorkloadSelectorArgs {
            labels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        /**
         * Configuration affecting network reachability of a sidecar. See more details at: https://istio.io/docs/reference/config/networking/sidecar.html
         */
        interface SidecarSpecArgs {
            egress?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.SidecarSpecEgressArgs>[]>;
            ingress?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.SidecarSpecIngressArgs>[]>;
            /**
             * Configuration for the outbound traffic policy.
             */
            outboundTrafficPolicy?: pulumi.Input<inputs.networking.v1beta1.SidecarSpecOutboundTrafficPolicyArgs>;
            workloadSelector?: pulumi.Input<inputs.networking.v1beta1.SidecarSpecWorkloadSelectorArgs>;
        }
        interface SidecarSpecEgressArgs {
            bind?: pulumi.Input<string>;
            captureMode?: pulumi.Input<string>;
            hosts?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * The port associated with the listener.
             */
            port?: pulumi.Input<inputs.networking.v1beta1.SidecarSpecEgressPortArgs>;
        }
        /**
         * The port associated with the listener.
         */
        interface SidecarSpecEgressPortArgs {
            /**
             * Label assigned to the port.
             */
            name?: pulumi.Input<string>;
            /**
             * A valid non-negative integer port number.
             */
            number?: pulumi.Input<number>;
            /**
             * The protocol exposed on the port.
             */
            protocol?: pulumi.Input<string>;
            targetPort?: pulumi.Input<number>;
        }
        interface SidecarSpecIngressArgs {
            /**
             * The IP to which the listener should be bound.
             */
            bind?: pulumi.Input<string>;
            captureMode?: pulumi.Input<string>;
            defaultEndpoint?: pulumi.Input<string>;
            /**
             * The port associated with the listener.
             */
            port?: pulumi.Input<inputs.networking.v1beta1.SidecarSpecIngressPortArgs>;
        }
        /**
         * The port associated with the listener.
         */
        interface SidecarSpecIngressPortArgs {
            /**
             * Label assigned to the port.
             */
            name?: pulumi.Input<string>;
            /**
             * A valid non-negative integer port number.
             */
            number?: pulumi.Input<number>;
            /**
             * The protocol exposed on the port.
             */
            protocol?: pulumi.Input<string>;
            targetPort?: pulumi.Input<number>;
        }
        /**
         * Configuration for the outbound traffic policy.
         */
        interface SidecarSpecOutboundTrafficPolicyArgs {
            egressProxy?: pulumi.Input<inputs.networking.v1beta1.SidecarSpecOutboundTrafficPolicyEgressProxyArgs>;
            mode?: pulumi.Input<string>;
        }
        interface SidecarSpecOutboundTrafficPolicyEgressProxyArgs {
            /**
             * The name of a service from the service registry.
             */
            host?: pulumi.Input<string>;
            /**
             * Specifies the port on the host that is being addressed.
             */
            port?: pulumi.Input<inputs.networking.v1beta1.SidecarSpecOutboundTrafficPolicyEgressProxyPortArgs>;
            /**
             * The name of a subset within the service.
             */
            subset?: pulumi.Input<string>;
        }
        /**
         * Specifies the port on the host that is being addressed.
         */
        interface SidecarSpecOutboundTrafficPolicyEgressProxyPortArgs {
            number?: pulumi.Input<number>;
        }
        interface SidecarSpecWorkloadSelectorArgs {
            labels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        /**
         * Configuration affecting label/content routing, sni routing, etc. See more details at: https://istio.io/docs/reference/config/networking/virtual-service.html
         */
        interface VirtualServiceSpecArgs {
            /**
             * A list of namespaces to which this virtual service is exported.
             */
            exportTo?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * The names of gateways and sidecars that should apply these routes.
             */
            gateways?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * The destination hosts to which traffic is being sent.
             */
            hosts?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * An ordered list of route rules for HTTP traffic.
             */
            http?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpArgs>[]>;
            /**
             * An ordered list of route rules for opaque TCP traffic.
             */
            tcp?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecTcpArgs>[]>;
            tls?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecTlsArgs>[]>;
        }
        interface VirtualServiceSpecHttpArgs {
            /**
             * Cross-Origin Resource Sharing policy (CORS).
             */
            corsPolicy?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpCorsPolicyArgs>;
            delegate?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpDelegateArgs>;
            /**
             * Fault injection policy to apply on HTTP traffic at the client side.
             */
            fault?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpFaultArgs>;
            headers?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpHeadersArgs>;
            match?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpMatchArgs>[]>;
            mirror?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpMirrorArgs>;
            /**
             * Percentage of the traffic to be mirrored by the `mirror` field.
             */
            mirrorPercent?: pulumi.Input<number>;
            /**
             * Percentage of the traffic to be mirrored by the `mirror` field.
             */
            mirrorPercentage?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpMirrorPercentageArgs>;
            /**
             * Percentage of the traffic to be mirrored by the `mirror` field.
             */
            mirror_percent?: pulumi.Input<number>;
            /**
             * The name assigned to the route for debugging purposes.
             */
            name?: pulumi.Input<string>;
            /**
             * A HTTP rule can either redirect or forward (default) traffic.
             */
            redirect?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpRedirectArgs>;
            /**
             * Retry policy for HTTP requests.
             */
            retries?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpRetriesArgs>;
            /**
             * Rewrite HTTP URIs and Authority headers.
             */
            rewrite?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpRewriteArgs>;
            /**
             * A HTTP rule can either redirect or forward (default) traffic.
             */
            route?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpRouteArgs>[]>;
            /**
             * Timeout for HTTP requests, default is disabled.
             */
            timeout?: pulumi.Input<string>;
        }
        /**
         * Cross-Origin Resource Sharing policy (CORS).
         */
        interface VirtualServiceSpecHttpCorsPolicyArgs {
            allowCredentials?: pulumi.Input<boolean>;
            allowHeaders?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * List of HTTP methods allowed to access the resource.
             */
            allowMethods?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * The list of origins that are allowed to perform CORS requests.
             */
            allowOrigin?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * String patterns that match allowed origins.
             */
            allowOrigins?: pulumi.Input<any[]>;
            exposeHeaders?: pulumi.Input<pulumi.Input<string>[]>;
            maxAge?: pulumi.Input<string>;
        }
        interface VirtualServiceSpecHttpDelegateArgs {
            /**
             * Name specifies the name of the delegate VirtualService.
             */
            name?: pulumi.Input<string>;
            /**
             * Namespace specifies the namespace where the delegate VirtualService resides.
             */
            namespace?: pulumi.Input<string>;
        }
        /**
         * Fault injection policy to apply on HTTP traffic at the client side.
         */
        interface VirtualServiceSpecHttpFaultArgs {
            abort?: any;
            delay?: any;
        }
        interface VirtualServiceSpecHttpHeadersArgs {
            request?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpHeadersRequestArgs>;
            response?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpHeadersResponseArgs>;
        }
        interface VirtualServiceSpecHttpHeadersRequestArgs {
            add?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            remove?: pulumi.Input<pulumi.Input<string>[]>;
            set?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        interface VirtualServiceSpecHttpHeadersResponseArgs {
            add?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            remove?: pulumi.Input<pulumi.Input<string>[]>;
            set?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        interface VirtualServiceSpecHttpMatchArgs {
            authority?: any;
            /**
             * Names of gateways where the rule should be applied.
             */
            gateways?: pulumi.Input<pulumi.Input<string>[]>;
            headers?: pulumi.Input<{
                [key: string]: any;
            }>;
            /**
             * Flag to specify whether the URI matching should be case-insensitive.
             */
            ignoreUriCase?: pulumi.Input<boolean>;
            method?: any;
            /**
             * The name assigned to a match.
             */
            name?: pulumi.Input<string>;
            /**
             * Specifies the ports on the host that is being addressed.
             */
            port?: pulumi.Input<number>;
            /**
             * Query parameters for matching.
             */
            queryParams?: pulumi.Input<{
                [key: string]: any;
            }>;
            scheme?: any;
            sourceLabels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * Source namespace constraining the applicability of a rule to workloads in that namespace.
             */
            sourceNamespace?: pulumi.Input<string>;
            uri?: any;
            /**
             * withoutHeader has the same syntax with the header, but has opposite meaning.
             */
            withoutHeaders?: pulumi.Input<{
                [key: string]: any;
            }>;
        }
        interface VirtualServiceSpecHttpMirrorArgs {
            /**
             * The name of a service from the service registry.
             */
            host?: pulumi.Input<string>;
            /**
             * Specifies the port on the host that is being addressed.
             */
            port?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpMirrorPortArgs>;
            /**
             * The name of a subset within the service.
             */
            subset?: pulumi.Input<string>;
        }
        /**
         * Percentage of the traffic to be mirrored by the `mirror` field.
         */
        interface VirtualServiceSpecHttpMirrorPercentageArgs {
            value?: pulumi.Input<number>;
        }
        /**
         * Specifies the port on the host that is being addressed.
         */
        interface VirtualServiceSpecHttpMirrorPortArgs {
            number?: pulumi.Input<number>;
        }
        /**
         * A HTTP rule can either redirect or forward (default) traffic.
         */
        interface VirtualServiceSpecHttpRedirectArgs {
            authority?: pulumi.Input<string>;
            redirectCode?: pulumi.Input<number>;
            uri?: pulumi.Input<string>;
        }
        /**
         * Retry policy for HTTP requests.
         */
        interface VirtualServiceSpecHttpRetriesArgs {
            /**
             * Number of retries to be allowed for a given request.
             */
            attempts?: pulumi.Input<number>;
            /**
             * Timeout per attempt for a given request, including the initial call and any retries.
             */
            perTryTimeout?: pulumi.Input<string>;
            /**
             * Specifies the conditions under which retry takes place.
             */
            retryOn?: pulumi.Input<string>;
            /**
             * Flag to specify whether the retries should retry to other localities.
             */
            retryRemoteLocalities?: pulumi.Input<boolean>;
        }
        /**
         * Rewrite HTTP URIs and Authority headers.
         */
        interface VirtualServiceSpecHttpRewriteArgs {
            /**
             * rewrite the Authority/Host header with this value.
             */
            authority?: pulumi.Input<string>;
            uri?: pulumi.Input<string>;
        }
        interface VirtualServiceSpecHttpRouteArgs {
            destination?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpRouteDestinationArgs>;
            headers?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpRouteHeadersArgs>;
            weight?: pulumi.Input<number>;
        }
        interface VirtualServiceSpecHttpRouteDestinationArgs {
            /**
             * The name of a service from the service registry.
             */
            host?: pulumi.Input<string>;
            /**
             * Specifies the port on the host that is being addressed.
             */
            port?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpRouteDestinationPortArgs>;
            /**
             * The name of a subset within the service.
             */
            subset?: pulumi.Input<string>;
        }
        /**
         * Specifies the port on the host that is being addressed.
         */
        interface VirtualServiceSpecHttpRouteDestinationPortArgs {
            number?: pulumi.Input<number>;
        }
        interface VirtualServiceSpecHttpRouteHeadersArgs {
            request?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpRouteHeadersRequestArgs>;
            response?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecHttpRouteHeadersResponseArgs>;
        }
        interface VirtualServiceSpecHttpRouteHeadersRequestArgs {
            add?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            remove?: pulumi.Input<pulumi.Input<string>[]>;
            set?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        interface VirtualServiceSpecHttpRouteHeadersResponseArgs {
            add?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            remove?: pulumi.Input<pulumi.Input<string>[]>;
            set?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        interface VirtualServiceSpecTcpArgs {
            match?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecTcpMatchArgs>[]>;
            /**
             * The destination to which the connection should be forwarded to.
             */
            route?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecTcpRouteArgs>[]>;
        }
        interface VirtualServiceSpecTcpMatchArgs {
            /**
             * IPv4 or IPv6 ip addresses of destination with optional subnet.
             */
            destinationSubnets?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * Names of gateways where the rule should be applied.
             */
            gateways?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * Specifies the port on the host that is being addressed.
             */
            port?: pulumi.Input<number>;
            sourceLabels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * Source namespace constraining the applicability of a rule to workloads in that namespace.
             */
            sourceNamespace?: pulumi.Input<string>;
            /**
             * IPv4 or IPv6 ip address of source with optional subnet.
             */
            sourceSubnet?: pulumi.Input<string>;
        }
        interface VirtualServiceSpecTcpRouteArgs {
            destination?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecTcpRouteDestinationArgs>;
            weight?: pulumi.Input<number>;
        }
        interface VirtualServiceSpecTcpRouteDestinationArgs {
            /**
             * The name of a service from the service registry.
             */
            host?: pulumi.Input<string>;
            /**
             * Specifies the port on the host that is being addressed.
             */
            port?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecTcpRouteDestinationPortArgs>;
            /**
             * The name of a subset within the service.
             */
            subset?: pulumi.Input<string>;
        }
        /**
         * Specifies the port on the host that is being addressed.
         */
        interface VirtualServiceSpecTcpRouteDestinationPortArgs {
            number?: pulumi.Input<number>;
        }
        interface VirtualServiceSpecTlsArgs {
            match?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecTlsMatchArgs>[]>;
            /**
             * The destination to which the connection should be forwarded to.
             */
            route?: pulumi.Input<pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecTlsRouteArgs>[]>;
        }
        interface VirtualServiceSpecTlsMatchArgs {
            /**
             * IPv4 or IPv6 ip addresses of destination with optional subnet.
             */
            destinationSubnets?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * Names of gateways where the rule should be applied.
             */
            gateways?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * Specifies the port on the host that is being addressed.
             */
            port?: pulumi.Input<number>;
            /**
             * SNI (server name indicator) to match on.
             */
            sniHosts?: pulumi.Input<pulumi.Input<string>[]>;
            sourceLabels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * Source namespace constraining the applicability of a rule to workloads in that namespace.
             */
            sourceNamespace?: pulumi.Input<string>;
        }
        interface VirtualServiceSpecTlsRouteArgs {
            destination?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecTlsRouteDestinationArgs>;
            weight?: pulumi.Input<number>;
        }
        interface VirtualServiceSpecTlsRouteDestinationArgs {
            /**
             * The name of a service from the service registry.
             */
            host?: pulumi.Input<string>;
            /**
             * Specifies the port on the host that is being addressed.
             */
            port?: pulumi.Input<inputs.networking.v1beta1.VirtualServiceSpecTlsRouteDestinationPortArgs>;
            /**
             * The name of a subset within the service.
             */
            subset?: pulumi.Input<string>;
        }
        /**
         * Specifies the port on the host that is being addressed.
         */
        interface VirtualServiceSpecTlsRouteDestinationPortArgs {
            number?: pulumi.Input<number>;
        }
        /**
         * Configuration affecting VMs onboarded into the mesh. See more details at: https://istio.io/docs/reference/config/networking/workload-entry.html
         */
        interface WorkloadEntrySpecArgs {
            address?: pulumi.Input<string>;
            /**
             * One or more labels associated with the endpoint.
             */
            labels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
            /**
             * The locality associated with the endpoint.
             */
            locality?: pulumi.Input<string>;
            network?: pulumi.Input<string>;
            /**
             * Set of ports associated with the endpoint.
             */
            ports?: pulumi.Input<{
                [key: string]: pulumi.Input<number>;
            }>;
            serviceAccount?: pulumi.Input<string>;
            /**
             * The load balancing weight associated with the endpoint.
             */
            weight?: pulumi.Input<number>;
        }
    }
}
export declare namespace security {
    namespace v1beta1 {
        /**
         * PeerAuthentication defines how traffic will be tunneled (or not) to the sidecar.
         */
        interface PeerAuthenticationSpecArgs {
            /**
             * Mutual TLS settings for workload.
             */
            mtls?: pulumi.Input<inputs.security.v1beta1.PeerAuthenticationSpecMtlsArgs>;
            /**
             * Port specific mutual TLS settings.
             */
            portLevelMtls?: pulumi.Input<{
                [key: string]: pulumi.Input<inputs.security.v1beta1.PeerAuthenticationSpecPortLevelMtlsArgs>;
            }>;
            /**
             * The selector determines the workloads to apply the ChannelAuthentication on.
             */
            selector?: pulumi.Input<inputs.security.v1beta1.PeerAuthenticationSpecSelectorArgs>;
        }
        /**
         * Mutual TLS settings for workload.
         */
        interface PeerAuthenticationSpecMtlsArgs {
            /**
             * Defines the mTLS mode used for peer authentication.
             */
            mode?: pulumi.Input<string>;
        }
        interface PeerAuthenticationSpecPortLevelMtlsArgs {
            /**
             * Defines the mTLS mode used for peer authentication.
             */
            mode?: pulumi.Input<string>;
        }
        /**
         * The selector determines the workloads to apply the ChannelAuthentication on.
         */
        interface PeerAuthenticationSpecSelectorArgs {
            matchLabels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        /**
         * RequestAuthentication defines what request authentication methods are supported by a workload.
         */
        interface RequestAuthenticationSpecArgs {
            /**
             * Define the list of JWTs that can be validated at the selected workloads' proxy.
             */
            jwtRules?: pulumi.Input<pulumi.Input<inputs.security.v1beta1.RequestAuthenticationSpecJwtRulesArgs>[]>;
            /**
             * The selector determines the workloads to apply the RequestAuthentication on.
             */
            selector?: pulumi.Input<inputs.security.v1beta1.RequestAuthenticationSpecSelectorArgs>;
        }
        interface RequestAuthenticationSpecJwtRulesArgs {
            audiences?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * If set to true, the orginal token will be kept for the ustream request.
             */
            forwardOriginalToken?: pulumi.Input<boolean>;
            /**
             * List of header locations from which JWT is expected.
             */
            fromHeaders?: pulumi.Input<pulumi.Input<inputs.security.v1beta1.RequestAuthenticationSpecJwtRulesFromHeadersArgs>[]>;
            /**
             * List of query parameters from which JWT is expected.
             */
            fromParams?: pulumi.Input<pulumi.Input<string>[]>;
            /**
             * Identifies the issuer that issued the JWT.
             */
            issuer?: pulumi.Input<string>;
            /**
             * JSON Web Key Set of public keys to validate signature of the JWT.
             */
            jwks?: pulumi.Input<string>;
            jwksUri?: pulumi.Input<string>;
            jwks_uri?: pulumi.Input<string>;
            outputPayloadToHeader?: pulumi.Input<string>;
        }
        interface RequestAuthenticationSpecJwtRulesFromHeadersArgs {
            /**
             * The HTTP header name.
             */
            name?: pulumi.Input<string>;
            /**
             * The prefix that should be stripped before decoding the token.
             */
            prefix?: pulumi.Input<string>;
        }
        /**
         * The selector determines the workloads to apply the RequestAuthentication on.
         */
        interface RequestAuthenticationSpecSelectorArgs {
            matchLabels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        interface AuthorizationRuleSpecArgs {
            selector?: pulumi.Input<outputs.security.v1beta1.AuthorizationRuleSpecSelectorArgs>;
            rules?: pulumi.Input<pulumi.Input<outputs.security.v1beta1.AuthorizationRuleSpecRulesArgs>[]>;
            action?: pulumi.Input<string | outputs.security.v1beta1.ActionSpecType>;
            provider?: pulumi.Input<outputs.security.v1beta1.AuthorizationRuleSpecProviderArgs>;
        }
    }
}
export declare namespace telemetry {
    namespace v1alpha1 {
        /**
         * Telemetry defines how the telemetry is generated for workloads within a mesh.
         */
        interface TelemetrySpecArgs {
            /**
             * Optional.
             */
            accessLogging?: pulumi.Input<pulumi.Input<inputs.telemetry.v1alpha1.TelemetrySpecAccessLoggingArgs>[]>;
            /**
             * Optional.
             */
            metrics?: pulumi.Input<pulumi.Input<inputs.telemetry.v1alpha1.TelemetrySpecMetricsArgs>[]>;
            /**
             * Optional.
             */
            selector?: pulumi.Input<inputs.telemetry.v1alpha1.TelemetrySpecSelectorArgs>;
            /**
             * Optional.
             */
            tracing?: pulumi.Input<pulumi.Input<inputs.telemetry.v1alpha1.TelemetrySpecTracingArgs>[]>;
        }
        interface TelemetrySpecAccessLoggingArgs {
            /**
             * Controls logging.
             */
            disabled?: pulumi.Input<boolean>;
            /**
             * Optional.
             */
            providers?: pulumi.Input<pulumi.Input<inputs.telemetry.v1alpha1.TelemetrySpecAccessLoggingProvidersArgs>[]>;
        }
        interface TelemetrySpecAccessLoggingProvidersArgs {
            /**
             * Required.
             */
            name?: pulumi.Input<string>;
        }
        interface TelemetrySpecMetricsArgs {
            /**
             * Optional.
             */
            overrides?: pulumi.Input<pulumi.Input<inputs.telemetry.v1alpha1.TelemetrySpecMetricsOverridesArgs>[]>;
            /**
             * Optional.
             */
            providers?: pulumi.Input<pulumi.Input<inputs.telemetry.v1alpha1.TelemetrySpecMetricsProvidersArgs>[]>;
        }
        interface TelemetrySpecMetricsOverridesArgs {
            /**
             * Optional.
             */
            disabled?: pulumi.Input<boolean>;
            /**
             * Match allows provides the scope of the override.
             */
            match?: any;
            /**
             * Optional.
             */
            tagOverrides?: pulumi.Input<{
                [key: string]: pulumi.Input<inputs.telemetry.v1alpha1.TelemetrySpecMetricsOverridesTagOverridesArgs>;
            }>;
        }
        interface TelemetrySpecMetricsOverridesTagOverridesArgs {
            /**
             * Operation controls whether or not to update/add a tag, or to remove it.
             */
            operation?: pulumi.Input<string>;
            /**
             * Value is only considered if the operation is `UPSERT`.
             */
            value?: pulumi.Input<string>;
        }
        interface TelemetrySpecMetricsProvidersArgs {
            /**
             * Required.
             */
            name?: pulumi.Input<string>;
        }
        /**
         * Optional.
         */
        interface TelemetrySpecSelectorArgs {
            matchLabels?: pulumi.Input<{
                [key: string]: pulumi.Input<string>;
            }>;
        }
        interface TelemetrySpecTracingArgs {
            /**
             * Optional.
             */
            customTags?: pulumi.Input<{
                [key: string]: any;
            }>;
            /**
             * Controls span reporting.
             */
            disableSpanReporting?: pulumi.Input<boolean>;
            /**
             * Optional.
             */
            providers?: pulumi.Input<pulumi.Input<inputs.telemetry.v1alpha1.TelemetrySpecTracingProvidersArgs>[]>;
            randomSamplingPercentage?: pulumi.Input<number>;
        }
        interface TelemetrySpecTracingProvidersArgs {
            /**
             * Required.
             */
            name?: pulumi.Input<string>;
        }
    }
}
