{
  "description": "IngressRouteTCP is the CRD implementation of a Traefik TCP Router.",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": [
        "string",
        "null"
      ]
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": [
        "string",
        "null"
      ]
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "additionalProperties": false,
      "description": "IngressRouteTCPSpec defines the desired state of IngressRouteTCP.",
      "properties": {
        "entryPoints": {
          "description": "EntryPoints defines the list of entry point names to bind to.\nEntry points have to be configured in the static configuration.\nMore info: https://doc.traefik.io/traefik/v3.6/reference/install-configuration/entrypoints/\nDefault: all.",
          "items": {
            "type": "string"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "routes": {
          "description": "Routes defines the list of routes.",
          "items": {
            "additionalProperties": false,
            "description": "RouteTCP holds the TCP route configuration.",
            "properties": {
              "match": {
                "description": "Match defines the router's rule.\nMore info: https://doc.traefik.io/traefik/v3.6/reference/routing-configuration/tcp/routing/rules-and-priority/",
                "type": "string"
              },
              "middlewares": {
                "description": "Middlewares defines the list of references to MiddlewareTCP resources.",
                "items": {
                  "additionalProperties": false,
                  "description": "ObjectReference is a generic reference to a Traefik resource.",
                  "properties": {
                    "name": {
                      "description": "Name defines the name of the referenced Traefik resource.",
                      "type": "string"
                    },
                    "namespace": {
                      "description": "Namespace defines the namespace of the referenced Traefik resource.",
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "type": "object"
                },
                "type": [
                  "array",
                  "null"
                ]
              },
              "priority": {
                "description": "Priority defines the router's priority.\nMore info: https://doc.traefik.io/traefik/v3.6/reference/routing-configuration/tcp/routing/rules-and-priority/#priority",
                "maximum": 9223372036854775000,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "services": {
                "description": "Services defines the list of TCP services.",
                "items": {
                  "additionalProperties": false,
                  "description": "ServiceTCP defines an upstream TCP service to proxy traffic to.",
                  "properties": {
                    "name": {
                      "description": "Name defines the name of the referenced Kubernetes Service.",
                      "type": "string"
                    },
                    "namespace": {
                      "description": "Namespace defines the namespace of the referenced Kubernetes Service.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "nativeLB": {
                      "description": "NativeLB controls, when creating the load-balancer,\nwhether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.\nThe Kubernetes Service itself does load-balance to the pods.\nBy default, NativeLB is false.",
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "nodePortLB": {
                      "description": "NodePortLB controls, when creating the load-balancer,\nwhether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.\nIt allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.\nBy default, NodePortLB is false.",
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "port": {
                      "anyOf": [
                        {
                          "type": "integer"
                        },
                        {
                          "type": "string"
                        }
                      ],
                      "description": "Port defines the port of a Kubernetes Service.\nThis can be a reference to a named port.",
                      "x-kubernetes-int-or-string": true
                    },
                    "proxyProtocol": {
                      "additionalProperties": false,
                      "description": "ProxyProtocol defines the PROXY protocol configuration.\nMore info: https://doc.traefik.io/traefik/v3.6/reference/routing-configuration/tcp/service/#proxy-protocol\n\nDeprecated: ProxyProtocol will not be supported in future APIVersions, please use ServersTransport to configure ProxyProtocol instead.",
                      "properties": {
                        "version": {
                          "description": "Version defines the PROXY Protocol version to use.",
                          "maximum": 2,
                          "minimum": 1,
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      },
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "serversTransport": {
                      "description": "ServersTransport defines the name of ServersTransportTCP resource to use.\nIt allows to configure the transport between Traefik and your servers.\nCan only be used on a Kubernetes Service.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "terminationDelay": {
                      "description": "TerminationDelay defines the deadline that the proxy sets, after one of its connected peers indicates\nit has closed the writing capability of its connection, to close the reading capability as well,\nhence fully terminating the connection.\nIt is a duration in milliseconds, defaulting to 100.\nA negative value means an infinite deadline (i.e. the reading capability is never closed).\n\nDeprecated: TerminationDelay will not be supported in future APIVersions, please use ServersTransport to configure the TerminationDelay instead.",
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "tls": {
                      "description": "TLS determines whether to use TLS when dialing with the backend.",
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "weight": {
                      "description": "Weight defines the weight used when balancing requests between multiple Kubernetes Service.",
                      "minimum": 0,
                      "type": [
                        "integer",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "name",
                    "port"
                  ],
                  "type": "object"
                },
                "type": [
                  "array",
                  "null"
                ]
              },
              "syntax": {
                "description": "Syntax defines the router's rule syntax.\nMore info: https://doc.traefik.io/traefik/v3.6/reference/routing-configuration/tcp/routing/rules-and-priority/#rulesyntax\n\nDeprecated: Please do not use this field and rewrite the router rules to use the v3 syntax.",
                "enum": [
                  "v3",
                  "v2"
                ],
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "match"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "tls": {
          "additionalProperties": false,
          "description": "TLS defines the TLS configuration on a layer 4 / TCP Route.\nMore info: https://doc.traefik.io/traefik/v3.6/reference/routing-configuration/tcp/routing/router/#tls",
          "properties": {
            "certResolver": {
              "description": "CertResolver defines the name of the certificate resolver to use.\nCert resolvers have to be configured in the static configuration.\nMore info: https://doc.traefik.io/traefik/v3.6/reference/install-configuration/tls/certificate-resolvers/acme/",
              "type": [
                "string",
                "null"
              ]
            },
            "domains": {
              "description": "Domains defines the list of domains that will be used to issue certificates.\nMore info: https://doc.traefik.io/traefik/v3.6/reference/routing-configuration/tcp/tls/#domains",
              "items": {
                "additionalProperties": false,
                "description": "Domain holds a domain name with SANs.",
                "properties": {
                  "main": {
                    "description": "Main defines the main domain name.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "sans": {
                    "description": "SANs defines the subject alternative domain names.",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  }
                },
                "type": "object"
              },
              "type": [
                "array",
                "null"
              ]
            },
            "options": {
              "additionalProperties": false,
              "description": "Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.\nIf not defined, the `default` TLSOption is used.\nMore info: https://doc.traefik.io/traefik/v3.6/reference/routing-configuration/tcp/tls/#tls-options",
              "properties": {
                "name": {
                  "description": "Name defines the name of the referenced Traefik resource.",
                  "type": "string"
                },
                "namespace": {
                  "description": "Namespace defines the namespace of the referenced Traefik resource.",
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "name"
              ],
              "type": [
                "object",
                "null"
              ]
            },
            "passthrough": {
              "description": "Passthrough defines whether a TLS router will terminate the TLS connection.",
              "type": [
                "boolean",
                "null"
              ]
            },
            "secretName": {
              "description": "SecretName is the name of the referenced Kubernetes Secret to specify the certificate details.",
              "type": [
                "string",
                "null"
              ]
            },
            "store": {
              "additionalProperties": false,
              "description": "Store defines the reference to the TLSStore, that will be used to store certificates.\nPlease note that only `default` TLSStore can be used.",
              "properties": {
                "name": {
                  "description": "Name defines the name of the referenced Traefik resource.",
                  "type": "string"
                },
                "namespace": {
                  "description": "Namespace defines the namespace of the referenced Traefik resource.",
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "name"
              ],
              "type": [
                "object",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        }
      },
      "required": [
        "routes"
      ],
      "type": "object"
    }
  },
  "required": [
    "metadata",
    "spec"
  ],
  "type": "object"
}