import { IObjectMeta } from "@kubernetes-models/apimachinery/apis/meta/v1/ObjectMeta";
import { Model, ModelData } from "@kubernetes-models/base";
/**
 * TraefikService is the CRD implementation of a Traefik Service. TraefikService object allows to: - Apply weight to Services on load-balancing - Mirror traffic on services More info: https://doc.traefik.io/traefik/v2.10/routing/providers/kubernetes-crd/#kind-traefikservice
 */
export interface ITraefikService {
    /**
     * APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
     */
    "apiVersion": "traefik.containo.us/v1alpha1";
    /**
     * Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
     */
    "kind": "TraefikService";
    "metadata": IObjectMeta;
    /**
     * TraefikServiceSpec defines the desired state of a TraefikService.
     */
    "spec": {
        /**
         * Mirroring defines the Mirroring service configuration.
         */
        "mirroring"?: {
            /**
             * Kind defines the kind of the Service.
             */
            "kind"?: "Service" | "TraefikService";
            /**
             * MaxBodySize defines the maximum size allowed for the body of the request. If the body is larger, the request is not mirrored. Default value is -1, which means unlimited size.
             */
            "maxBodySize"?: number;
            /**
             * Mirrors defines the list of mirrors where Traefik will duplicate the traffic.
             */
            "mirrors"?: Array<{
                /**
                 * Kind defines the kind of the Service.
                 */
                "kind"?: "Service" | "TraefikService";
                /**
                 * Name defines the name of the referenced Kubernetes Service or TraefikService. The differentiation between the two is specified in the Kind field.
                 */
                "name": string;
                /**
                 * Namespace defines the namespace of the referenced Kubernetes Service or TraefikService.
                 */
                "namespace"?: string;
                /**
                 * NativeLB controls, when creating the load-balancer, whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP. The Kubernetes Service itself does load-balance to the pods. By default, NativeLB is false.
                 */
                "nativeLB"?: boolean;
                /**
                 * PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service. By default, passHostHeader is true.
                 */
                "passHostHeader"?: boolean;
                /**
                 * Percent defines the part of the traffic to mirror. Supported values: 0 to 100.
                 */
                "percent"?: number;
                /**
                 * Port defines the port of a Kubernetes Service. This can be a reference to a named port.
                 */
                "port"?: number | string;
                /**
                 * ResponseForwarding defines how Traefik forwards the response from the upstream Kubernetes Service to the client.
                 */
                "responseForwarding"?: {
                    /**
                     * FlushInterval defines the interval, in milliseconds, in between flushes to the client while copying the response body. A negative value means to flush immediately after each write to the client. This configuration is ignored when ReverseProxy recognizes a response as a streaming response; for such responses, writes are flushed to the client immediately. Default: 100ms
                     */
                    "flushInterval"?: string;
                };
                /**
                 * Scheme defines the scheme to use for the request to the upstream Kubernetes Service. It defaults to https when Kubernetes Service port is 443, http otherwise.
                 */
                "scheme"?: string;
                /**
                 * ServersTransport defines the name of ServersTransport resource to use. It allows to configure the transport between Traefik and your servers. Can only be used on a Kubernetes Service.
                 */
                "serversTransport"?: string;
                /**
                 * Sticky defines the sticky sessions configuration. More info: https://doc.traefik.io/traefik/v2.10/routing/services/#sticky-sessions
                 */
                "sticky"?: {
                    /**
                     * Cookie defines the sticky cookie configuration.
                     */
                    "cookie"?: {
                        /**
                         * HTTPOnly defines whether the cookie can be accessed by client-side APIs, such as JavaScript.
                         */
                        "httpOnly"?: boolean;
                        /**
                         * Name defines the Cookie name.
                         */
                        "name"?: string;
                        /**
                         * SameSite defines the same site policy. More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
                         */
                        "sameSite"?: string;
                        /**
                         * Secure defines whether the cookie can only be transmitted over an encrypted connection (i.e. HTTPS).
                         */
                        "secure"?: boolean;
                    };
                };
                /**
                 * Strategy defines the load balancing strategy between the servers. RoundRobin is the only supported value at the moment.
                 */
                "strategy"?: string;
                /**
                 * Weight defines the weight and should only be specified when Name references a TraefikService object (and to be precise, one that embeds a Weighted Round Robin).
                 */
                "weight"?: number;
            }>;
            /**
             * Name defines the name of the referenced Kubernetes Service or TraefikService. The differentiation between the two is specified in the Kind field.
             */
            "name": string;
            /**
             * Namespace defines the namespace of the referenced Kubernetes Service or TraefikService.
             */
            "namespace"?: string;
            /**
             * NativeLB controls, when creating the load-balancer, whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP. The Kubernetes Service itself does load-balance to the pods. By default, NativeLB is false.
             */
            "nativeLB"?: boolean;
            /**
             * PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service. By default, passHostHeader is true.
             */
            "passHostHeader"?: boolean;
            /**
             * Port defines the port of a Kubernetes Service. This can be a reference to a named port.
             */
            "port"?: number | string;
            /**
             * ResponseForwarding defines how Traefik forwards the response from the upstream Kubernetes Service to the client.
             */
            "responseForwarding"?: {
                /**
                 * FlushInterval defines the interval, in milliseconds, in between flushes to the client while copying the response body. A negative value means to flush immediately after each write to the client. This configuration is ignored when ReverseProxy recognizes a response as a streaming response; for such responses, writes are flushed to the client immediately. Default: 100ms
                 */
                "flushInterval"?: string;
            };
            /**
             * Scheme defines the scheme to use for the request to the upstream Kubernetes Service. It defaults to https when Kubernetes Service port is 443, http otherwise.
             */
            "scheme"?: string;
            /**
             * ServersTransport defines the name of ServersTransport resource to use. It allows to configure the transport between Traefik and your servers. Can only be used on a Kubernetes Service.
             */
            "serversTransport"?: string;
            /**
             * Sticky defines the sticky sessions configuration. More info: https://doc.traefik.io/traefik/v2.10/routing/services/#sticky-sessions
             */
            "sticky"?: {
                /**
                 * Cookie defines the sticky cookie configuration.
                 */
                "cookie"?: {
                    /**
                     * HTTPOnly defines whether the cookie can be accessed by client-side APIs, such as JavaScript.
                     */
                    "httpOnly"?: boolean;
                    /**
                     * Name defines the Cookie name.
                     */
                    "name"?: string;
                    /**
                     * SameSite defines the same site policy. More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
                     */
                    "sameSite"?: string;
                    /**
                     * Secure defines whether the cookie can only be transmitted over an encrypted connection (i.e. HTTPS).
                     */
                    "secure"?: boolean;
                };
            };
            /**
             * Strategy defines the load balancing strategy between the servers. RoundRobin is the only supported value at the moment.
             */
            "strategy"?: string;
            /**
             * Weight defines the weight and should only be specified when Name references a TraefikService object (and to be precise, one that embeds a Weighted Round Robin).
             */
            "weight"?: number;
        };
        /**
         * Weighted defines the Weighted Round Robin configuration.
         */
        "weighted"?: {
            /**
             * Services defines the list of Kubernetes Service and/or TraefikService to load-balance, with weight.
             */
            "services"?: Array<{
                /**
                 * Kind defines the kind of the Service.
                 */
                "kind"?: "Service" | "TraefikService";
                /**
                 * Name defines the name of the referenced Kubernetes Service or TraefikService. The differentiation between the two is specified in the Kind field.
                 */
                "name": string;
                /**
                 * Namespace defines the namespace of the referenced Kubernetes Service or TraefikService.
                 */
                "namespace"?: string;
                /**
                 * NativeLB controls, when creating the load-balancer, whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP. The Kubernetes Service itself does load-balance to the pods. By default, NativeLB is false.
                 */
                "nativeLB"?: boolean;
                /**
                 * PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service. By default, passHostHeader is true.
                 */
                "passHostHeader"?: boolean;
                /**
                 * Port defines the port of a Kubernetes Service. This can be a reference to a named port.
                 */
                "port"?: number | string;
                /**
                 * ResponseForwarding defines how Traefik forwards the response from the upstream Kubernetes Service to the client.
                 */
                "responseForwarding"?: {
                    /**
                     * FlushInterval defines the interval, in milliseconds, in between flushes to the client while copying the response body. A negative value means to flush immediately after each write to the client. This configuration is ignored when ReverseProxy recognizes a response as a streaming response; for such responses, writes are flushed to the client immediately. Default: 100ms
                     */
                    "flushInterval"?: string;
                };
                /**
                 * Scheme defines the scheme to use for the request to the upstream Kubernetes Service. It defaults to https when Kubernetes Service port is 443, http otherwise.
                 */
                "scheme"?: string;
                /**
                 * ServersTransport defines the name of ServersTransport resource to use. It allows to configure the transport between Traefik and your servers. Can only be used on a Kubernetes Service.
                 */
                "serversTransport"?: string;
                /**
                 * Sticky defines the sticky sessions configuration. More info: https://doc.traefik.io/traefik/v2.10/routing/services/#sticky-sessions
                 */
                "sticky"?: {
                    /**
                     * Cookie defines the sticky cookie configuration.
                     */
                    "cookie"?: {
                        /**
                         * HTTPOnly defines whether the cookie can be accessed by client-side APIs, such as JavaScript.
                         */
                        "httpOnly"?: boolean;
                        /**
                         * Name defines the Cookie name.
                         */
                        "name"?: string;
                        /**
                         * SameSite defines the same site policy. More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
                         */
                        "sameSite"?: string;
                        /**
                         * Secure defines whether the cookie can only be transmitted over an encrypted connection (i.e. HTTPS).
                         */
                        "secure"?: boolean;
                    };
                };
                /**
                 * Strategy defines the load balancing strategy between the servers. RoundRobin is the only supported value at the moment.
                 */
                "strategy"?: string;
                /**
                 * Weight defines the weight and should only be specified when Name references a TraefikService object (and to be precise, one that embeds a Weighted Round Robin).
                 */
                "weight"?: number;
            }>;
            /**
             * Sticky defines whether sticky sessions are enabled. More info: https://doc.traefik.io/traefik/v2.10/routing/providers/kubernetes-crd/#stickiness-and-load-balancing
             */
            "sticky"?: {
                /**
                 * Cookie defines the sticky cookie configuration.
                 */
                "cookie"?: {
                    /**
                     * HTTPOnly defines whether the cookie can be accessed by client-side APIs, such as JavaScript.
                     */
                    "httpOnly"?: boolean;
                    /**
                     * Name defines the Cookie name.
                     */
                    "name"?: string;
                    /**
                     * SameSite defines the same site policy. More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
                     */
                    "sameSite"?: string;
                    /**
                     * Secure defines whether the cookie can only be transmitted over an encrypted connection (i.e. HTTPS).
                     */
                    "secure"?: boolean;
                };
            };
        };
    };
}
/**
 * TraefikService is the CRD implementation of a Traefik Service. TraefikService object allows to: - Apply weight to Services on load-balancing - Mirror traffic on services More info: https://doc.traefik.io/traefik/v2.10/routing/providers/kubernetes-crd/#kind-traefikservice
 */
export declare class TraefikService extends Model<ITraefikService> implements ITraefikService {
    "apiVersion": ITraefikService["apiVersion"];
    "kind": ITraefikService["kind"];
    "metadata": ITraefikService["metadata"];
    "spec": ITraefikService["spec"];
    static apiVersion: ITraefikService["apiVersion"];
    static kind: ITraefikService["kind"];
    static is: import("@kubernetes-models/base").TypeMetaGuard<ITraefikService>;
    constructor(data?: ModelData<ITraefikService>);
}
