{
  "properties": {
    "spec": {
      "description": "Configuration affecting label/content routing, sni routing, etc. See more details at: https://istio.io/docs/reference/config/networking/virtual-service.html",
      "properties": {
        "exportTo": {
          "description": "A list of namespaces to which this virtual service is exported.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "gateways": {
          "description": "The names of gateways and sidecars that should apply these routes.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "hosts": {
          "description": "The destination hosts to which traffic is being sent.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "http": {
          "description": "An ordered list of route rules for HTTP traffic.",
          "items": {
            "properties": {
              "corsPolicy": {
                "description": "Cross-Origin Resource Sharing policy (CORS).",
                "properties": {
                  "allowCredentials": {
                    "description": "Indicates whether the caller is allowed to send the actual request (not the preflight) using credentials.",
                    "nullable": true,
                    "type": "boolean"
                  },
                  "allowHeaders": {
                    "description": "List of HTTP headers that can be used when requesting the resource.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "allowMethods": {
                    "description": "List of HTTP methods allowed to access the resource.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "allowOrigin": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "allowOrigins": {
                    "description": "String patterns that match allowed origins.",
                    "items": {
                      "oneOf": [
                        {
                          "not": {
                            "anyOf": [
                              {
                                "required": [
                                  "exact"
                                ]
                              },
                              {
                                "required": [
                                  "prefix"
                                ]
                              },
                              {
                                "required": [
                                  "regex"
                                ]
                              }
                            ]
                          }
                        },
                        {
                          "required": [
                            "exact"
                          ]
                        },
                        {
                          "required": [
                            "prefix"
                          ]
                        },
                        {
                          "required": [
                            "regex"
                          ]
                        }
                      ],
                      "properties": {
                        "exact": {
                          "type": "string"
                        },
                        "prefix": {
                          "type": "string"
                        },
                        "regex": {
                          "description": "[RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "exposeHeaders": {
                    "description": "A list of HTTP headers that the browsers are allowed to access.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "maxAge": {
                    "description": "Specifies how long the results of a preflight request can be cached.",
                    "type": "string",
                    "x-kubernetes-validations": [
                      {
                        "message": "must be a valid duration greater than 1ms",
                        "rule": "duration(self) >= duration('1ms')"
                      }
                    ]
                  },
                  "unmatchedPreflights": {
                    "description": "Indicates whether preflight requests not matching the configured allowed origin shouldn't be forwarded to the upstream.\n\nValid Options: FORWARD, IGNORE",
                    "enum": [
                      "UNSPECIFIED",
                      "FORWARD",
                      "IGNORE"
                    ],
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "delegate": {
                "description": "Delegate is used to specify the particular VirtualService which can be used to define delegate HTTPRoute.",
                "properties": {
                  "name": {
                    "description": "Name specifies the name of the delegate VirtualService.",
                    "type": "string"
                  },
                  "namespace": {
                    "description": "Namespace specifies the namespace where the delegate VirtualService resides.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "directResponse": {
                "description": "A HTTP rule can either return a direct_response, redirect or forward (default) traffic.",
                "properties": {
                  "body": {
                    "description": "Specifies the content of the response body.",
                    "oneOf": [
                      {
                        "not": {
                          "anyOf": [
                            {
                              "required": [
                                "string"
                              ]
                            },
                            {
                              "required": [
                                "bytes"
                              ]
                            }
                          ]
                        }
                      },
                      {
                        "required": [
                          "string"
                        ]
                      },
                      {
                        "required": [
                          "bytes"
                        ]
                      }
                    ],
                    "properties": {
                      "bytes": {
                        "description": "response body as base64 encoded bytes.",
                        "format": "byte",
                        "type": "string"
                      },
                      "string": {
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "status": {
                    "description": "Specifies the HTTP response status to be returned.",
                    "maximum": 4294967295,
                    "minimum": 0,
                    "type": "integer"
                  }
                },
                "required": [
                  "status"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "fault": {
                "description": "Fault injection policy to apply on HTTP traffic at the client side.",
                "properties": {
                  "abort": {
                    "description": "Abort Http request attempts and return error codes back to downstream service, giving the impression that the upstream service is faulty.",
                    "oneOf": [
                      {
                        "not": {
                          "anyOf": [
                            {
                              "required": [
                                "httpStatus"
                              ]
                            },
                            {
                              "required": [
                                "grpcStatus"
                              ]
                            },
                            {
                              "required": [
                                "http2Error"
                              ]
                            }
                          ]
                        }
                      },
                      {
                        "required": [
                          "httpStatus"
                        ]
                      },
                      {
                        "required": [
                          "grpcStatus"
                        ]
                      },
                      {
                        "required": [
                          "http2Error"
                        ]
                      }
                    ],
                    "properties": {
                      "grpcStatus": {
                        "description": "GRPC status code to use to abort the request.",
                        "type": "string"
                      },
                      "http2Error": {
                        "type": "string"
                      },
                      "httpStatus": {
                        "description": "HTTP status code to use to abort the Http request.",
                        "format": "int32",
                        "type": "integer"
                      },
                      "percentage": {
                        "description": "Percentage of requests to be aborted with the error code provided.",
                        "properties": {
                          "value": {
                            "format": "double",
                            "type": "number"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "delay": {
                    "description": "Delay requests before forwarding, emulating various failures such as network issues, overloaded upstream service, etc.",
                    "oneOf": [
                      {
                        "not": {
                          "anyOf": [
                            {
                              "required": [
                                "fixedDelay"
                              ]
                            },
                            {
                              "required": [
                                "exponentialDelay"
                              ]
                            }
                          ]
                        }
                      },
                      {
                        "required": [
                          "fixedDelay"
                        ]
                      },
                      {
                        "required": [
                          "exponentialDelay"
                        ]
                      }
                    ],
                    "properties": {
                      "exponentialDelay": {
                        "type": "string",
                        "x-kubernetes-validations": [
                          {
                            "message": "must be a valid duration greater than 1ms",
                            "rule": "duration(self) >= duration('1ms')"
                          }
                        ]
                      },
                      "fixedDelay": {
                        "description": "Add a fixed delay before forwarding the request.",
                        "type": "string",
                        "x-kubernetes-validations": [
                          {
                            "message": "must be a valid duration greater than 1ms",
                            "rule": "duration(self) >= duration('1ms')"
                          }
                        ]
                      },
                      "percent": {
                        "description": "Percentage of requests on which the delay will be injected (0-100).",
                        "format": "int32",
                        "type": "integer"
                      },
                      "percentage": {
                        "description": "Percentage of requests on which the delay will be injected.",
                        "properties": {
                          "value": {
                            "format": "double",
                            "type": "number"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "headers": {
                "properties": {
                  "request": {
                    "properties": {
                      "add": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "type": "object"
                      },
                      "remove": {
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "set": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "type": "object"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "response": {
                    "properties": {
                      "add": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "type": "object"
                      },
                      "remove": {
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "set": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "type": "object"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "match": {
                "description": "Match conditions to be satisfied for the rule to be activated.",
                "items": {
                  "properties": {
                    "authority": {
                      "description": "HTTP Authority values are case-sensitive and formatted as follows: - `exact: \"value\"` for exact string match - `prefix: \"value\"` for prefix-based match - `regex: \"value\"` for [RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).",
                      "oneOf": [
                        {
                          "not": {
                            "anyOf": [
                              {
                                "required": [
                                  "exact"
                                ]
                              },
                              {
                                "required": [
                                  "prefix"
                                ]
                              },
                              {
                                "required": [
                                  "regex"
                                ]
                              }
                            ]
                          }
                        },
                        {
                          "required": [
                            "exact"
                          ]
                        },
                        {
                          "required": [
                            "prefix"
                          ]
                        },
                        {
                          "required": [
                            "regex"
                          ]
                        }
                      ],
                      "properties": {
                        "exact": {
                          "type": "string"
                        },
                        "prefix": {
                          "type": "string"
                        },
                        "regex": {
                          "description": "[RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "gateways": {
                      "description": "Names of gateways where the rule should be applied.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "headers": {
                      "additionalProperties": {
                        "oneOf": [
                          {
                            "not": {
                              "anyOf": [
                                {
                                  "required": [
                                    "exact"
                                  ]
                                },
                                {
                                  "required": [
                                    "prefix"
                                  ]
                                },
                                {
                                  "required": [
                                    "regex"
                                  ]
                                }
                              ]
                            }
                          },
                          {
                            "required": [
                              "exact"
                            ]
                          },
                          {
                            "required": [
                              "prefix"
                            ]
                          },
                          {
                            "required": [
                              "regex"
                            ]
                          }
                        ],
                        "properties": {
                          "exact": {
                            "type": "string"
                          },
                          "prefix": {
                            "type": "string"
                          },
                          "regex": {
                            "description": "[RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).",
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "description": "The header keys must be lowercase and use hyphen as the separator, e.g.",
                      "type": "object"
                    },
                    "ignoreUriCase": {
                      "description": "Flag to specify whether the URI matching should be case-insensitive.",
                      "type": "boolean"
                    },
                    "method": {
                      "description": "HTTP Method values are case-sensitive and formatted as follows: - `exact: \"value\"` for exact string match - `prefix: \"value\"` for prefix-based match - `regex: \"value\"` for [RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).",
                      "oneOf": [
                        {
                          "not": {
                            "anyOf": [
                              {
                                "required": [
                                  "exact"
                                ]
                              },
                              {
                                "required": [
                                  "prefix"
                                ]
                              },
                              {
                                "required": [
                                  "regex"
                                ]
                              }
                            ]
                          }
                        },
                        {
                          "required": [
                            "exact"
                          ]
                        },
                        {
                          "required": [
                            "prefix"
                          ]
                        },
                        {
                          "required": [
                            "regex"
                          ]
                        }
                      ],
                      "properties": {
                        "exact": {
                          "type": "string"
                        },
                        "prefix": {
                          "type": "string"
                        },
                        "regex": {
                          "description": "[RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "name": {
                      "description": "The name assigned to a match.",
                      "type": "string"
                    },
                    "port": {
                      "description": "Specifies the ports on the host that is being addressed.",
                      "maximum": 4294967295,
                      "minimum": 0,
                      "type": "integer"
                    },
                    "queryParams": {
                      "additionalProperties": {
                        "oneOf": [
                          {
                            "not": {
                              "anyOf": [
                                {
                                  "required": [
                                    "exact"
                                  ]
                                },
                                {
                                  "required": [
                                    "prefix"
                                  ]
                                },
                                {
                                  "required": [
                                    "regex"
                                  ]
                                }
                              ]
                            }
                          },
                          {
                            "required": [
                              "exact"
                            ]
                          },
                          {
                            "required": [
                              "prefix"
                            ]
                          },
                          {
                            "required": [
                              "regex"
                            ]
                          }
                        ],
                        "properties": {
                          "exact": {
                            "type": "string"
                          },
                          "prefix": {
                            "type": "string"
                          },
                          "regex": {
                            "description": "[RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).",
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "description": "Query parameters for matching.",
                      "type": "object"
                    },
                    "scheme": {
                      "description": "URI Scheme values are case-sensitive and formatted as follows: - `exact: \"value\"` for exact string match - `prefix: \"value\"` for prefix-based match - `regex: \"value\"` for [RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).",
                      "oneOf": [
                        {
                          "not": {
                            "anyOf": [
                              {
                                "required": [
                                  "exact"
                                ]
                              },
                              {
                                "required": [
                                  "prefix"
                                ]
                              },
                              {
                                "required": [
                                  "regex"
                                ]
                              }
                            ]
                          }
                        },
                        {
                          "required": [
                            "exact"
                          ]
                        },
                        {
                          "required": [
                            "prefix"
                          ]
                        },
                        {
                          "required": [
                            "regex"
                          ]
                        }
                      ],
                      "properties": {
                        "exact": {
                          "type": "string"
                        },
                        "prefix": {
                          "type": "string"
                        },
                        "regex": {
                          "description": "[RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "sourceLabels": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "One or more labels that constrain the applicability of a rule to source (client) workloads with the given labels.",
                      "type": "object"
                    },
                    "sourceNamespace": {
                      "description": "Source namespace constraining the applicability of a rule to workloads in that namespace.",
                      "type": "string"
                    },
                    "statPrefix": {
                      "description": "The human readable prefix to use when emitting statistics for this route.",
                      "type": "string"
                    },
                    "uri": {
                      "description": "URI to match values are case-sensitive and formatted as follows: - `exact: \"value\"` for exact string match - `prefix: \"value\"` for prefix-based match - `regex: \"value\"` for [RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).",
                      "oneOf": [
                        {
                          "not": {
                            "anyOf": [
                              {
                                "required": [
                                  "exact"
                                ]
                              },
                              {
                                "required": [
                                  "prefix"
                                ]
                              },
                              {
                                "required": [
                                  "regex"
                                ]
                              }
                            ]
                          }
                        },
                        {
                          "required": [
                            "exact"
                          ]
                        },
                        {
                          "required": [
                            "prefix"
                          ]
                        },
                        {
                          "required": [
                            "regex"
                          ]
                        }
                      ],
                      "properties": {
                        "exact": {
                          "type": "string"
                        },
                        "prefix": {
                          "type": "string"
                        },
                        "regex": {
                          "description": "[RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "withoutHeaders": {
                      "additionalProperties": {
                        "oneOf": [
                          {
                            "not": {
                              "anyOf": [
                                {
                                  "required": [
                                    "exact"
                                  ]
                                },
                                {
                                  "required": [
                                    "prefix"
                                  ]
                                },
                                {
                                  "required": [
                                    "regex"
                                  ]
                                }
                              ]
                            }
                          },
                          {
                            "required": [
                              "exact"
                            ]
                          },
                          {
                            "required": [
                              "prefix"
                            ]
                          },
                          {
                            "required": [
                              "regex"
                            ]
                          }
                        ],
                        "properties": {
                          "exact": {
                            "type": "string"
                          },
                          "prefix": {
                            "type": "string"
                          },
                          "regex": {
                            "description": "[RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).",
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "description": "withoutHeader has the same syntax with the header, but has opposite meaning.",
                      "type": "object"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              },
              "mirror": {
                "description": "Mirror HTTP traffic to a another destination in addition to forwarding the requests to the intended destination.",
                "properties": {
                  "host": {
                    "description": "The name of a service from the service registry.",
                    "type": "string"
                  },
                  "port": {
                    "description": "Specifies the port on the host that is being addressed.",
                    "properties": {
                      "number": {
                        "maximum": 4294967295,
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "subset": {
                    "description": "The name of a subset within the service.",
                    "type": "string"
                  }
                },
                "required": [
                  "host"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "mirror_percent": {
                "maximum": 4294967295,
                "minimum": 0,
                "nullable": true,
                "type": "integer"
              },
              "mirrorPercent": {
                "maximum": 4294967295,
                "minimum": 0,
                "nullable": true,
                "type": "integer"
              },
              "mirrorPercentage": {
                "description": "Percentage of the traffic to be mirrored by the `mirror` field.",
                "properties": {
                  "value": {
                    "format": "double",
                    "type": "number"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "mirrors": {
                "description": "Specifies the destinations to mirror HTTP traffic in addition to the original destination.",
                "items": {
                  "properties": {
                    "destination": {
                      "description": "Destination specifies the target of the mirror operation.",
                      "properties": {
                        "host": {
                          "description": "The name of a service from the service registry.",
                          "type": "string"
                        },
                        "port": {
                          "description": "Specifies the port on the host that is being addressed.",
                          "properties": {
                            "number": {
                              "maximum": 4294967295,
                              "minimum": 0,
                              "type": "integer"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "subset": {
                          "description": "The name of a subset within the service.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "host"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "percentage": {
                      "description": "Percentage of the traffic to be mirrored by the `destination` field.",
                      "properties": {
                        "value": {
                          "format": "double",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "destination"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              },
              "name": {
                "description": "The name assigned to the route for debugging purposes.",
                "type": "string"
              },
              "redirect": {
                "description": "A HTTP rule can either return a direct_response, redirect or forward (default) traffic.",
                "oneOf": [
                  {
                    "not": {
                      "anyOf": [
                        {
                          "required": [
                            "port"
                          ]
                        },
                        {
                          "required": [
                            "derivePort"
                          ]
                        }
                      ]
                    }
                  },
                  {
                    "required": [
                      "port"
                    ]
                  },
                  {
                    "required": [
                      "derivePort"
                    ]
                  }
                ],
                "properties": {
                  "authority": {
                    "description": "On a redirect, overwrite the Authority/Host portion of the URL with this value.",
                    "type": "string"
                  },
                  "derivePort": {
                    "description": "On a redirect, dynamically set the port: * FROM_PROTOCOL_DEFAULT: automatically set to 80 for HTTP and 443 for HTTPS.\n\nValid Options: FROM_PROTOCOL_DEFAULT, FROM_REQUEST_PORT",
                    "enum": [
                      "FROM_PROTOCOL_DEFAULT",
                      "FROM_REQUEST_PORT"
                    ],
                    "type": "string"
                  },
                  "port": {
                    "description": "On a redirect, overwrite the port portion of the URL with this value.",
                    "maximum": 4294967295,
                    "minimum": 0,
                    "type": "integer"
                  },
                  "redirectCode": {
                    "description": "On a redirect, Specifies the HTTP status code to use in the redirect response.",
                    "maximum": 4294967295,
                    "minimum": 0,
                    "type": "integer"
                  },
                  "scheme": {
                    "description": "On a redirect, overwrite the scheme portion of the URL with this value.",
                    "type": "string"
                  },
                  "uri": {
                    "description": "On a redirect, overwrite the Path portion of the URL with this value.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "retries": {
                "description": "Retry policy for HTTP requests.",
                "properties": {
                  "attempts": {
                    "description": "Number of retries to be allowed for a given request.",
                    "format": "int32",
                    "type": "integer"
                  },
                  "backoff": {
                    "description": "Specifies the minimum duration between retry attempts.",
                    "type": "string",
                    "x-kubernetes-validations": [
                      {
                        "message": "must be a valid duration greater than 1ms",
                        "rule": "duration(self) >= duration('1ms')"
                      }
                    ]
                  },
                  "perTryTimeout": {
                    "description": "Timeout per attempt for a given request, including the initial call and any retries.",
                    "type": "string",
                    "x-kubernetes-validations": [
                      {
                        "message": "must be a valid duration greater than 1ms",
                        "rule": "duration(self) >= duration('1ms')"
                      }
                    ]
                  },
                  "retryIgnorePreviousHosts": {
                    "description": "Flag to specify whether the retries should ignore previously tried hosts during retry.",
                    "nullable": true,
                    "type": "boolean"
                  },
                  "retryOn": {
                    "description": "Specifies the conditions under which retry takes place.",
                    "type": "string"
                  },
                  "retryRemoteLocalities": {
                    "description": "Flag to specify whether the retries should retry to other localities.",
                    "nullable": true,
                    "type": "boolean"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "rewrite": {
                "description": "Rewrite HTTP URIs and Authority headers.",
                "properties": {
                  "authority": {
                    "description": "rewrite the Authority/Host header with this value.",
                    "type": "string"
                  },
                  "uri": {
                    "description": "rewrite the path (or the prefix) portion of the URI with this value.",
                    "type": "string"
                  },
                  "uriRegexRewrite": {
                    "description": "rewrite the path portion of the URI with the specified regex.",
                    "properties": {
                      "match": {
                        "description": "[RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).",
                        "type": "string"
                      },
                      "rewrite": {
                        "description": "The string that should replace into matching portions of original URI.",
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "route": {
                "description": "A HTTP rule can either return a direct_response, redirect or forward (default) traffic.",
                "items": {
                  "properties": {
                    "destination": {
                      "description": "Destination uniquely identifies the instances of a service to which the request/connection should be forwarded to.",
                      "properties": {
                        "host": {
                          "description": "The name of a service from the service registry.",
                          "type": "string"
                        },
                        "port": {
                          "description": "Specifies the port on the host that is being addressed.",
                          "properties": {
                            "number": {
                              "maximum": 4294967295,
                              "minimum": 0,
                              "type": "integer"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "subset": {
                          "description": "The name of a subset within the service.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "host"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "headers": {
                      "properties": {
                        "request": {
                          "properties": {
                            "add": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "type": "object"
                            },
                            "remove": {
                              "items": {
                                "type": "string"
                              },
                              "type": "array"
                            },
                            "set": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "type": "object"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "response": {
                          "properties": {
                            "add": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "type": "object"
                            },
                            "remove": {
                              "items": {
                                "type": "string"
                              },
                              "type": "array"
                            },
                            "set": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "type": "object"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "weight": {
                      "description": "Weight specifies the relative proportion of traffic to be forwarded to the destination.",
                      "format": "int32",
                      "type": "integer"
                    }
                  },
                  "required": [
                    "destination"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              },
              "timeout": {
                "description": "Timeout for HTTP requests, default is disabled.",
                "type": "string",
                "x-kubernetes-validations": [
                  {
                    "message": "must be a valid duration greater than 1ms",
                    "rule": "duration(self) >= duration('1ms')"
                  }
                ]
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "tcp": {
          "description": "An ordered list of route rules for opaque TCP traffic.",
          "items": {
            "properties": {
              "match": {
                "description": "Match conditions to be satisfied for the rule to be activated.",
                "items": {
                  "properties": {
                    "destinationSubnets": {
                      "description": "IPv4 or IPv6 ip addresses of destination with optional subnet.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "gateways": {
                      "description": "Names of gateways where the rule should be applied.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "port": {
                      "description": "Specifies the port on the host that is being addressed.",
                      "maximum": 4294967295,
                      "minimum": 0,
                      "type": "integer"
                    },
                    "sourceLabels": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "One or more labels that constrain the applicability of a rule to workloads with the given labels.",
                      "type": "object"
                    },
                    "sourceNamespace": {
                      "description": "Source namespace constraining the applicability of a rule to workloads in that namespace.",
                      "type": "string"
                    },
                    "sourceSubnet": {
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              },
              "route": {
                "description": "The destination to which the connection should be forwarded to.",
                "items": {
                  "properties": {
                    "destination": {
                      "description": "Destination uniquely identifies the instances of a service to which the request/connection should be forwarded to.",
                      "properties": {
                        "host": {
                          "description": "The name of a service from the service registry.",
                          "type": "string"
                        },
                        "port": {
                          "description": "Specifies the port on the host that is being addressed.",
                          "properties": {
                            "number": {
                              "maximum": 4294967295,
                              "minimum": 0,
                              "type": "integer"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "subset": {
                          "description": "The name of a subset within the service.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "host"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "weight": {
                      "description": "Weight specifies the relative proportion of traffic to be forwarded to the destination.",
                      "format": "int32",
                      "type": "integer"
                    }
                  },
                  "required": [
                    "destination"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "tls": {
          "description": "An ordered list of route rule for non-terminated TLS & HTTPS traffic.",
          "items": {
            "properties": {
              "match": {
                "description": "Match conditions to be satisfied for the rule to be activated.",
                "items": {
                  "properties": {
                    "destinationSubnets": {
                      "description": "IPv4 or IPv6 ip addresses of destination with optional subnet.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "gateways": {
                      "description": "Names of gateways where the rule should be applied.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "port": {
                      "description": "Specifies the port on the host that is being addressed.",
                      "maximum": 4294967295,
                      "minimum": 0,
                      "type": "integer"
                    },
                    "sniHosts": {
                      "description": "SNI (server name indicator) to match on.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "sourceLabels": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "One or more labels that constrain the applicability of a rule to workloads with the given labels.",
                      "type": "object"
                    },
                    "sourceNamespace": {
                      "description": "Source namespace constraining the applicability of a rule to workloads in that namespace.",
                      "type": "string"
                    }
                  },
                  "required": [
                    "sniHosts"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              },
              "route": {
                "description": "The destination to which the connection should be forwarded to.",
                "items": {
                  "properties": {
                    "destination": {
                      "description": "Destination uniquely identifies the instances of a service to which the request/connection should be forwarded to.",
                      "properties": {
                        "host": {
                          "description": "The name of a service from the service registry.",
                          "type": "string"
                        },
                        "port": {
                          "description": "Specifies the port on the host that is being addressed.",
                          "properties": {
                            "number": {
                              "maximum": 4294967295,
                              "minimum": 0,
                              "type": "integer"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "subset": {
                          "description": "The name of a subset within the service.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "host"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "weight": {
                      "description": "Weight specifies the relative proportion of traffic to be forwarded to the destination.",
                      "format": "int32",
                      "type": "integer"
                    }
                  },
                  "required": [
                    "destination"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              }
            },
            "required": [
              "match"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "properties": {
        "conditions": {
          "description": "Current service state of the resource.",
          "items": {
            "properties": {
              "lastProbeTime": {
                "description": "Last time we probed the condition.",
                "format": "date-time",
                "type": "string"
              },
              "lastTransitionTime": {
                "description": "Last time the condition transitioned from one status to another.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "Human-readable message indicating details about last transition.",
                "type": "string"
              },
              "observedGeneration": {
                "anyOf": [
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Resource Generation to which the Condition refers.",
                "x-kubernetes-int-or-string": true
              },
              "reason": {
                "description": "Unique, one-word, CamelCase reason for the condition's last transition.",
                "type": "string"
              },
              "status": {
                "description": "Status is the status of the condition.",
                "type": "string"
              },
              "type": {
                "description": "Type is the type of the condition.",
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "observedGeneration": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "string"
            }
          ],
          "x-kubernetes-int-or-string": true
        },
        "validationMessages": {
          "description": "Includes any errors or warnings detected by Istio's analyzers.",
          "items": {
            "properties": {
              "documentationUrl": {
                "description": "A url pointing to the Istio documentation for this specific error type.",
                "type": "string"
              },
              "level": {
                "description": "Represents how severe a message is.\n\nValid Options: UNKNOWN, ERROR, WARNING, INFO",
                "enum": [
                  "UNKNOWN",
                  "ERROR",
                  "WARNING",
                  "INFO"
                ],
                "type": "string"
              },
              "type": {
                "properties": {
                  "code": {
                    "description": "A 7 character code matching `^IST[0-9]{4}$` intended to uniquely identify the message type.",
                    "type": "string"
                  },
                  "name": {
                    "description": "A human-readable name for the message type.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        }
      },
      "type": "object",
      "x-kubernetes-preserve-unknown-fields": true,
      "additionalProperties": false
    }
  },
  "type": "object"
}
