diff --git a/PROJECT b/PROJECT index a26bf08d7..39fc24f3e 100644 --- a/PROJECT +++ b/PROJECT @@ -43,12 +43,4 @@ resources: kind: IstioCNI path: github.com/istio-ecosystem/sail-operator/api/v1alpha1 version: v1alpha1 -- api: - crdVersion: v1 - namespaced: false - controller: true - domain: sailoperator.io - kind: ZTunnel - path: github.com/istio-ecosystem/sail-operator/api/v1alpha1 - version: v1alpha1 version: "3" diff --git a/api/v1alpha1/values_types_extra.go b/api/v1alpha1/values_types_extra.go index d58f1f1a1..6e3d9ef97 100644 --- a/api/v1alpha1/values_types_extra.go +++ b/api/v1alpha1/values_types_extra.go @@ -14,10 +14,6 @@ package v1alpha1 -import ( - k8sv1 "k8s.io/api/core/v1" -) - type SDSConfigToken struct { Aud string `json:"aud,omitempty"` } @@ -29,106 +25,3 @@ type CNIValues struct { // Part of the global configuration applicable to the Istio CNI component. Global *CNIGlobalConfig `json:"global,omitempty"` } - -type ZTunnelValues struct { - // Configuration for the Istio ztunnel plugin. - ZTunnel *ZTunnelConfig `json:"ztunnel,omitempty"` - - // Part of the global configuration applicable to the Istio ztunnel component. - Global *ZTunnelGlobalConfig `json:"global,omitempty"` -} - -// Configuration for ztunnel. -type ZTunnelConfig struct { - // Hub to pull the container image from. Image will be `Hub/Image:Tag-Variant`. - Hub *string `json:"hub,omitempty"` - // The container image tag to pull. Image will be `Hub/Image:Tag-Variant`. - Tag *string `json:"tag,omitempty"` - // The container image variant to pull. Options are "debug" or "distroless". Unset will use the default for the given version. - Variant *string `json:"variant,omitempty"` - // Image name to pull from. Image will be `Hub/Image:Tag-Variant`. - // If Image contains a "/", it will replace the entire `image` in the pod. - Image *string `json:"image,omitempty"` - // Annotations to apply to all top level resources - Annotations map[string]string `json:"Annotations,omitempty"` - // Labels to apply to all top level resources - Labels map[string]string `json:"Labels,omitempty"` - // Additional volumeMounts to the ztunnel container - VolumeMounts []k8sv1.VolumeMount `json:"volumeMounts,omitempty"` - // Additional volumes to add to the ztunnel Pod. - Volumes []k8sv1.Volume `json:"volumes,omitempty"` - // Annotations added to each pod. The default annotations are required for scraping prometheus (in most environments). - PodAnnotations map[string]string `json:"podAnnotations,omitempty"` - // Additional labels to apply on the pod level. - PodLabels map[string]string `json:"podLabels,omitempty"` - // The k8s resource requests and limits for the ztunnel Pods. - Resources *k8sv1.ResourceRequirements `json:"resources,omitempty"` - // List of secret names to add to the service account as image pull secrets - // to use for pulling any images in pods that reference this ServiceAccount. - // Must be set for any cluster configured with private docker registry. - ImagePullSecrets []string `json:"imagePullSecrets,omitempty"` - // A `key: value` mapping of environment variables to add to the pod - Env map[string]string `json:"env,omitempty"` - // Specifies the image pull policy for the Istio images. one of Always, Never, IfNotPresent. - // Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. - // - // More info: https://kubernetes.io/docs/concepts/containers/images#updating-images - // +kubebuilder:validation:Enum=Always;Never;IfNotPresent - ImagePullPolicy *k8sv1.PullPolicy `json:"imagePullPolicy,omitempty"` - // Settings for multicluster. - // The name of the cluster we are installing in. Note this is a user-defined name, which must be consistent - // with Istiod configuration. - MultiCluster *MultiClusterConfig `json:"multiCluster,omitempty"` - // meshConfig defines runtime configuration of components. - // For ztunnel, only defaultConfig is used, but this is nested under `meshConfig` for consistency with other components. - MeshConfig *MeshConfig `json:"meshConfig,omitempty"` - // Configures the revision this control plane is a part of - Revision *string `json:"revision,omitempty"` - // The address of the CA for CSR. - CaAddress *string `json:"caAddress,omitempty"` - // The customized XDS address to retrieve configuration. - XdsAddress *string `json:"xdsAddress,omitempty"` - // Specifies the default namespace for the Istio control plane components. - IstioNamespace *string `json:"istioNamespace,omitempty"` - // Same as `global.logging.level`, but will override it if set - Logging *GlobalLoggingConfig `json:"logging,omitempty"` - // Specifies whether istio components should output logs in json format by adding --log_as_json argument to each container. - LogAsJSON *bool `json:"logAsJSON,omitempty"` -} - -// ZTunnelGlobalConfig is a subset of the Global Configuration used in the Istio ztunnel chart. -type ZTunnelGlobalConfig struct { // Default k8s resources settings for all Istio control plane components. - // - // See https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container - // - // Deprecated: Marked as deprecated in pkg/apis/values_types.proto. - DefaultResources *k8sv1.ResourceRequirements `json:"defaultResources,omitempty"` - - // Specifies the docker hub for Istio images. - Hub *string `json:"hub,omitempty"` - // Specifies the image pull policy for the Istio images. one of Always, Never, IfNotPresent. - // Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. - // - // More info: https://kubernetes.io/docs/concepts/containers/images#updating-images - // +kubebuilder:validation:Enum=Always;Never;IfNotPresent - ImagePullPolicy *k8sv1.PullPolicy `json:"imagePullPolicy,omitempty"` - // ImagePullSecrets for the control plane ServiceAccount, list of secrets in the same namespace - // to use for pulling any images in pods that reference this ServiceAccount. - // Must be set for any cluster configured with private docker registry. - ImagePullSecrets []string `json:"imagePullSecrets,omitempty"` - - // Specifies whether istio components should output logs in json format by adding --log_as_json argument to each container. - LogAsJSON *bool `json:"logAsJSON,omitempty"` - // Specifies the global logging level settings for the Istio control plane components. - Logging *GlobalLoggingConfig `json:"logging,omitempty"` - - // Specifies the tag for the Istio docker images. - Tag *string `json:"tag,omitempty"` - // The variant of the Istio container images to use. Options are "debug" or "distroless". Unset will use the default for the given version. - Variant *string `json:"variant,omitempty"` - - // Platform in which Istio is deployed. Possible values are: "openshift" and "gcp" - // An empty value means it is a vanilla Kubernetes distribution, therefore no special - // treatment will be considered. - Platform *string `json:"platform,omitempty"` -} diff --git a/api/v1alpha1/ztunnel_types.go b/api/v1alpha1/ztunnel_types.go deleted file mode 100644 index 933383387..000000000 --- a/api/v1alpha1/ztunnel_types.go +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package v1alpha1 - -import ( - "time" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -const ( - ZTunnelKind = "ZTunnel" -) - -// ZTunnelSpec defines the desired state of ZTunnel -type ZTunnelSpec struct { - // +sail:version - // Defines the version of Istio to install. - // Must be one of: v1.24.1. - // +operator-sdk:csv:customresourcedefinitions:type=spec,order=1,displayName="Istio Version",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:fieldGroup:General", "urn:alm:descriptor:com.tectonic.ui:select:v1.24.1"} - // +kubebuilder:validation:Enum=v1.24.1 - // +kubebuilder:default=v1.24.1 - Version string `json:"version"` - - // +sail:profile - // The built-in installation configuration profile to use. - // The 'default' profile is 'ambient' and it is always applied. - // Must be one of: ambient, default, demo, empty, external, preview, remote, stable. - // +++PROFILES-DROPDOWN-HIDDEN-UNTIL-WE-FULLY-IMPLEMENT-THEM+++operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Profile",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:fieldGroup:General", "urn:alm:descriptor:com.tectonic.ui:select:ambient", "urn:alm:descriptor:com.tectonic.ui:select:default", "urn:alm:descriptor:com.tectonic.ui:select:demo", "urn:alm:descriptor:com.tectonic.ui:select:empty", "urn:alm:descriptor:com.tectonic.ui:select:external", "urn:alm:descriptor:com.tectonic.ui:select:minimal", "urn:alm:descriptor:com.tectonic.ui:select:preview", "urn:alm:descriptor:com.tectonic.ui:select:remote"} - // +operator-sdk:csv:customresourcedefinitions:type=spec,xDescriptors={"urn:alm:descriptor:com.tectonic.ui:hidden"} - // +kubebuilder:validation:Enum=ambient;default;demo;empty;external;openshift-ambient;openshift;preview;remote;stable - // +kubebuilder:default=ambient - Profile string `json:"profile,omitempty"` - - // Namespace to which the Istio ztunnel component should be installed. - // +operator-sdk:csv:customresourcedefinitions:type=spec,xDescriptors={"urn:alm:descriptor:io.kubernetes:Namespace"} - // +kubebuilder:default=ztunnel - Namespace string `json:"namespace"` - - // Defines the values to be passed to the Helm charts when installing Istio ztunnel. - // +operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Helm Values" - Values *ZTunnelValues `json:"values,omitempty"` -} - -// ZTunnelStatus defines the observed state of ZTunnel -type ZTunnelStatus struct { - // ObservedGeneration is the most recent generation observed for this - // ZTunnel object. It corresponds to the object's generation, which is - // updated on mutation by the API Server. The information in the status - // pertains to this particular generation of the object. - ObservedGeneration int64 `json:"observedGeneration,omitempty"` - - // Represents the latest available observations of the object's current state. - Conditions []ZTunnelCondition `json:"conditions,omitempty"` - - // Reports the current state of the object. - State ZTunnelConditionReason `json:"state,omitempty"` -} - -// GetCondition returns the condition of the specified type -func (s *ZTunnelStatus) GetCondition(conditionType ZTunnelConditionType) ZTunnelCondition { - if s != nil { - for i := range s.Conditions { - if s.Conditions[i].Type == conditionType { - return s.Conditions[i] - } - } - } - return ZTunnelCondition{Type: conditionType, Status: metav1.ConditionUnknown} -} - -// SetCondition sets a specific condition in the list of conditions -func (s *ZTunnelStatus) SetCondition(condition ZTunnelCondition) { - var now time.Time - if testTime == nil { - now = time.Now() - } else { - now = *testTime - } - - // The lastTransitionTime only gets serialized out to the second. This can - // break update skipping, as the time in the resource returned from the client - // may not match the time in our cached status during a reconcile. We truncate - // here to save any problems down the line. - lastTransitionTime := metav1.NewTime(now.Truncate(time.Second)) - - for i, prevCondition := range s.Conditions { - if prevCondition.Type == condition.Type { - if prevCondition.Status != condition.Status { - condition.LastTransitionTime = lastTransitionTime - } else { - condition.LastTransitionTime = prevCondition.LastTransitionTime - } - s.Conditions[i] = condition - return - } - } - - // If the condition does not exist, initialize the lastTransitionTime - condition.LastTransitionTime = lastTransitionTime - s.Conditions = append(s.Conditions, condition) -} - -// ZTunnelCondition represents a specific observation of the ZTunnel object's state. -type ZTunnelCondition struct { - // The type of this condition. - Type ZTunnelConditionType `json:"type,omitempty"` - - // The status of this condition. Can be True, False or Unknown. - Status metav1.ConditionStatus `json:"status,omitempty"` - - // Unique, single-word, CamelCase reason for the condition's last transition. - Reason ZTunnelConditionReason `json:"reason,omitempty"` - - // Human-readable message indicating details about the last transition. - Message string `json:"message,omitempty"` - - // Last time the condition transitioned from one status to another. - LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` -} - -// ZTunnelConditionType represents the type of the condition. Condition stages are: -// Installed, Reconciled, Ready -type ZTunnelConditionType string - -// ZTunnelConditionReason represents a short message indicating how the condition came -// to be in its present state. -type ZTunnelConditionReason string - -const ( - // ZTunnelConditionReconciled signifies whether the controller has - // successfully reconciled the resources defined through the CR. - ZTunnelConditionReconciled ZTunnelConditionType = "Reconciled" - - // ZTunnelReasonReconcileError indicates that the reconciliation of the resource has failed, but will be retried. - ZTunnelReasonReconcileError ZTunnelConditionReason = "ReconcileError" -) - -const ( - // ZTunnelConditionReady signifies whether the ztunnel DaemonSet is ready. - ZTunnelConditionReady ZTunnelConditionType = "Ready" - - // ZTunnelDaemonSetNotReady indicates that the ztunnel DaemonSet is not ready. - ZTunnelDaemonSetNotReady ZTunnelConditionReason = "DaemonSetNotReady" - - // ZTunnelReasonReadinessCheckFailed indicates that the DaemonSet readiness status could not be ascertained. - ZTunnelReasonReadinessCheckFailed ZTunnelConditionReason = "ReadinessCheckFailed" -) - -const ( - // ZTunnelReasonHealthy indicates that the control plane is fully reconciled and that all components are ready. - ZTunnelReasonHealthy ZTunnelConditionReason = "Healthy" -) - -// +kubebuilder:object:root=true -// +kubebuilder:resource:scope=Cluster,categories=istio-io -// +kubebuilder:subresource:status -// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.conditions[?(@.type==\"Ready\")].status",description="Whether the Istio ztunnel installation is ready to handle requests." -// +kubebuilder:printcolumn:name="Status",type="string",JSONPath=".status.state",description="The current state of this object." -// +kubebuilder:printcolumn:name="Version",type="string",JSONPath=".spec.version",description="The version of the Istio ztunnel installation." -// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp",description="The age of the object" -// +kubebuilder:validation:XValidation:rule="self.metadata.name == 'default'",message="metadata.name must be 'default'" - -// ZTunnel represents a deployment of the Istio ztunnel component. -type ZTunnel struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - // +kubebuilder:default={version: "v1.24.0", namespace: "ztunnel", profile: "ambient"} - Spec ZTunnelSpec `json:"spec,omitempty"` - - Status ZTunnelStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true - -// ZTunnelList contains a list of ZTunnel -type ZTunnelList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []ZTunnel `json:"items"` -} - -func init() { - SchemeBuilder.Register(&ZTunnel{}, &ZTunnelList{}) -} diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 23c9298be..502b18c4b 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -5222,347 +5222,6 @@ func (in *WorkloadSelector) DeepCopy() *WorkloadSelector { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ZTunnel) DeepCopyInto(out *ZTunnel) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZTunnel. -func (in *ZTunnel) DeepCopy() *ZTunnel { - if in == nil { - return nil - } - out := new(ZTunnel) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ZTunnel) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ZTunnelCondition) DeepCopyInto(out *ZTunnelCondition) { - *out = *in - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZTunnelCondition. -func (in *ZTunnelCondition) DeepCopy() *ZTunnelCondition { - if in == nil { - return nil - } - out := new(ZTunnelCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ZTunnelConfig) DeepCopyInto(out *ZTunnelConfig) { - *out = *in - if in.Hub != nil { - in, out := &in.Hub, &out.Hub - *out = new(string) - **out = **in - } - if in.Tag != nil { - in, out := &in.Tag, &out.Tag - *out = new(string) - **out = **in - } - if in.Variant != nil { - in, out := &in.Variant, &out.Variant - *out = new(string) - **out = **in - } - if in.Image != nil { - in, out := &in.Image, &out.Image - *out = new(string) - **out = **in - } - if in.Annotations != nil { - in, out := &in.Annotations, &out.Annotations - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.Labels != nil { - in, out := &in.Labels, &out.Labels - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.VolumeMounts != nil { - in, out := &in.VolumeMounts, &out.VolumeMounts - *out = make([]v1.VolumeMount, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Volumes != nil { - in, out := &in.Volumes, &out.Volumes - *out = make([]v1.Volume, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.PodAnnotations != nil { - in, out := &in.PodAnnotations, &out.PodAnnotations - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.PodLabels != nil { - in, out := &in.PodLabels, &out.PodLabels - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.Resources != nil { - in, out := &in.Resources, &out.Resources - *out = new(v1.ResourceRequirements) - (*in).DeepCopyInto(*out) - } - if in.ImagePullSecrets != nil { - in, out := &in.ImagePullSecrets, &out.ImagePullSecrets - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Env != nil { - in, out := &in.Env, &out.Env - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.ImagePullPolicy != nil { - in, out := &in.ImagePullPolicy, &out.ImagePullPolicy - *out = new(v1.PullPolicy) - **out = **in - } - if in.MultiCluster != nil { - in, out := &in.MultiCluster, &out.MultiCluster - *out = new(MultiClusterConfig) - (*in).DeepCopyInto(*out) - } - if in.MeshConfig != nil { - in, out := &in.MeshConfig, &out.MeshConfig - *out = new(MeshConfig) - (*in).DeepCopyInto(*out) - } - if in.Revision != nil { - in, out := &in.Revision, &out.Revision - *out = new(string) - **out = **in - } - if in.CaAddress != nil { - in, out := &in.CaAddress, &out.CaAddress - *out = new(string) - **out = **in - } - if in.XdsAddress != nil { - in, out := &in.XdsAddress, &out.XdsAddress - *out = new(string) - **out = **in - } - if in.IstioNamespace != nil { - in, out := &in.IstioNamespace, &out.IstioNamespace - *out = new(string) - **out = **in - } - if in.Logging != nil { - in, out := &in.Logging, &out.Logging - *out = new(GlobalLoggingConfig) - (*in).DeepCopyInto(*out) - } - if in.LogAsJSON != nil { - in, out := &in.LogAsJSON, &out.LogAsJSON - *out = new(bool) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZTunnelConfig. -func (in *ZTunnelConfig) DeepCopy() *ZTunnelConfig { - if in == nil { - return nil - } - out := new(ZTunnelConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ZTunnelGlobalConfig) DeepCopyInto(out *ZTunnelGlobalConfig) { - *out = *in - if in.DefaultResources != nil { - in, out := &in.DefaultResources, &out.DefaultResources - *out = new(v1.ResourceRequirements) - (*in).DeepCopyInto(*out) - } - if in.Hub != nil { - in, out := &in.Hub, &out.Hub - *out = new(string) - **out = **in - } - if in.ImagePullPolicy != nil { - in, out := &in.ImagePullPolicy, &out.ImagePullPolicy - *out = new(v1.PullPolicy) - **out = **in - } - if in.ImagePullSecrets != nil { - in, out := &in.ImagePullSecrets, &out.ImagePullSecrets - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.LogAsJSON != nil { - in, out := &in.LogAsJSON, &out.LogAsJSON - *out = new(bool) - **out = **in - } - if in.Logging != nil { - in, out := &in.Logging, &out.Logging - *out = new(GlobalLoggingConfig) - (*in).DeepCopyInto(*out) - } - if in.Tag != nil { - in, out := &in.Tag, &out.Tag - *out = new(string) - **out = **in - } - if in.Variant != nil { - in, out := &in.Variant, &out.Variant - *out = new(string) - **out = **in - } - if in.Platform != nil { - in, out := &in.Platform, &out.Platform - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZTunnelGlobalConfig. -func (in *ZTunnelGlobalConfig) DeepCopy() *ZTunnelGlobalConfig { - if in == nil { - return nil - } - out := new(ZTunnelGlobalConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ZTunnelList) DeepCopyInto(out *ZTunnelList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ZTunnel, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZTunnelList. -func (in *ZTunnelList) DeepCopy() *ZTunnelList { - if in == nil { - return nil - } - out := new(ZTunnelList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ZTunnelList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ZTunnelSpec) DeepCopyInto(out *ZTunnelSpec) { - *out = *in - if in.Values != nil { - in, out := &in.Values, &out.Values - *out = new(ZTunnelValues) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZTunnelSpec. -func (in *ZTunnelSpec) DeepCopy() *ZTunnelSpec { - if in == nil { - return nil - } - out := new(ZTunnelSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ZTunnelStatus) DeepCopyInto(out *ZTunnelStatus) { - *out = *in - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make([]ZTunnelCondition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZTunnelStatus. -func (in *ZTunnelStatus) DeepCopy() *ZTunnelStatus { - if in == nil { - return nil - } - out := new(ZTunnelStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ZTunnelValues) DeepCopyInto(out *ZTunnelValues) { - *out = *in - if in.ZTunnel != nil { - in, out := &in.ZTunnel, &out.ZTunnel - *out = new(ZTunnelConfig) - (*in).DeepCopyInto(*out) - } - if in.Global != nil { - in, out := &in.Global, &out.Global - *out = new(ZTunnelGlobalConfig) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZTunnelValues. -func (in *ZTunnelValues) DeepCopy() *ZTunnelValues { - if in == nil { - return nil - } - out := new(ZTunnelValues) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ZeroVPNConfig) DeepCopyInto(out *ZeroVPNConfig) { *out = *in diff --git a/bundle.Dockerfile b/bundle.Dockerfile index 224280ceb..c03f711e2 100644 --- a/bundle.Dockerfile +++ b/bundle.Dockerfile @@ -5,7 +5,7 @@ LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1 LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/ LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/ LABEL operators.operatorframework.io.bundle.package.v1=sailoperator -LABEL operators.operatorframework.io.bundle.channels.v1="dev-0.2" +LABEL operators.operatorframework.io.bundle.channels.v1="stable-0.2" LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.38.0 LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1 LABEL operators.operatorframework.io.metrics.project_layout=go.kubebuilder.io/v4 diff --git a/bundle/manifests/sailoperator.clusterserviceversion.yaml b/bundle/manifests/sailoperator.clusterserviceversion.yaml index 0720217bc..ea8d87d02 100644 --- a/bundle/manifests/sailoperator.clusterserviceversion.yaml +++ b/bundle/manifests/sailoperator.clusterserviceversion.yaml @@ -34,7 +34,7 @@ metadata: capabilities: Seamless Upgrades categories: OpenShift Optional, Integration & Delivery, Networking, Security containerImage: quay.io/maistra-dev/sail-operator:0.2-latest - createdAt: "2024-12-11T12:36:11Z" + createdAt: "2024-12-11T12:47:34Z" description: Experimental operator for installing Istio service mesh features.operators.openshift.io/cnf: "false" features.operators.openshift.io/cni: "true" @@ -304,37 +304,6 @@ spec: displayName: Helm Values path: values version: v1alpha1 - - description: ZTunnel represents a deployment of the Istio ztunnel component. - displayName: ZTunnel - kind: ZTunnel - name: ztunnels.sailoperator.io - specDescriptors: - - description: |- - Defines the version of Istio to install. - Must be one of: v1.24.1. - displayName: Istio Version - path: version - x-descriptors: - - urn:alm:descriptor:com.tectonic.ui:fieldGroup:General - - urn:alm:descriptor:com.tectonic.ui:select:v1.24.1 - - description: Namespace to which the Istio ztunnel component should be installed. - displayName: Namespace - path: namespace - x-descriptors: - - urn:alm:descriptor:io.kubernetes:Namespace - - description: |- - The built-in installation configuration profile to use. - The 'default' profile is 'ambient' and it is always applied. - Must be one of: ambient, default, demo, empty, external, preview, remote, stable. - displayName: Profile - path: profile - x-descriptors: - - urn:alm:descriptor:com.tectonic.ui:hidden - - description: Defines the values to be passed to the Helm charts when installing - Istio ztunnel. - displayName: Helm Values - path: values - version: v1alpha1 description: |- This is an experimental operator for installing Istio service mesh. diff --git a/bundle/manifests/sailoperator.io_ztunnels.yaml b/bundle/manifests/sailoperator.io_ztunnels.yaml deleted file mode 100644 index bf771509a..000000000 --- a/bundle/manifests/sailoperator.io_ztunnels.yaml +++ /dev/null @@ -1,5533 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.16.5 - creationTimestamp: null - name: ztunnels.sailoperator.io -spec: - group: sailoperator.io - names: - categories: - - istio-io - kind: ZTunnel - listKind: ZTunnelList - plural: ztunnels - singular: ztunnel - scope: Cluster - versions: - - additionalPrinterColumns: - - description: Whether the Istio ztunnel installation is ready to handle requests. - jsonPath: .status.conditions[?(@.type=="Ready")].status - name: Ready - type: string - - description: The current state of this object. - jsonPath: .status.state - name: Status - type: string - - description: The version of the Istio ztunnel installation. - jsonPath: .spec.version - name: Version - type: string - - description: The age of the object - jsonPath: .metadata.creationTimestamp - name: Age - type: date - name: v1alpha1 - schema: - openAPIV3Schema: - description: ZTunnel represents a deployment of the Istio ztunnel component. - properties: - apiVersion: - description: |- - 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 - type: string - kind: - description: |- - 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 - type: string - metadata: - type: object - spec: - default: - namespace: ztunnel - profile: ambient - version: v1.24.0 - description: ZTunnelSpec defines the desired state of ZTunnel - properties: - namespace: - default: ztunnel - description: Namespace to which the Istio ztunnel component should - be installed. - type: string - profile: - default: ambient - description: |- - The built-in installation configuration profile to use. - The 'default' profile is 'ambient' and it is always applied. - Must be one of: ambient, default, demo, empty, external, preview, remote, stable. - enum: - - ambient - - default - - demo - - empty - - external - - openshift-ambient - - openshift - - preview - - remote - - stable - type: string - values: - description: Defines the values to be passed to the Helm charts when - installing Istio ztunnel. - properties: - global: - description: Part of the global configuration applicable to the - Istio ztunnel component. - properties: - defaultResources: - description: |- - See https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container - - Deprecated: Marked as deprecated in pkg/apis/values_types.proto. - properties: - claims: - description: |- - Claims lists the names of resources, defined in spec.resourceClaims, - that are used by this container. - - This is an alpha field and requires enabling the - DynamicResourceAllocation feature gate. - - This field is immutable. It can only be set for containers. - items: - description: ResourceClaim references one entry in PodSpec.ResourceClaims. - properties: - name: - description: |- - Name must match the name of one entry in pod.spec.resourceClaims of - the Pod where this field is used. It makes that resource available - inside a container. - type: string - request: - description: |- - Request is the name chosen for a request in the referenced claim. - If empty, everything from the claim is made available, otherwise - only the result of this request. - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: |- - Limits describes the maximum amount of compute resources allowed. - More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: |- - Requests describes the minimum amount of compute resources required. - If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, - otherwise to an implementation-defined value. Requests cannot exceed Limits. - More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - type: object - type: object - hub: - description: Specifies the docker hub for Istio images. - type: string - imagePullPolicy: - description: |- - Specifies the image pull policy for the Istio images. one of Always, Never, IfNotPresent. - Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. - - More info: https://kubernetes.io/docs/concepts/containers/images#updating-images - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - description: |- - ImagePullSecrets for the control plane ServiceAccount, list of secrets in the same namespace - to use for pulling any images in pods that reference this ServiceAccount. - Must be set for any cluster configured with private docker registry. - items: - type: string - type: array - logAsJSON: - description: Specifies whether istio components should output - logs in json format by adding --log_as_json argument to - each container. - type: boolean - logging: - description: Specifies the global logging level settings for - the Istio control plane components. - properties: - level: - description: |- - Comma-separated minimum per-scope logging level of messages to output, in the form of :,: - The control plane has different scopes depending on component, but can configure default log level across all components - If empty, default scope and level will be used as configured in code - type: string - type: object - platform: - description: |- - Platform in which Istio is deployed. Possible values are: "openshift" and "gcp" - An empty value means it is a vanilla Kubernetes distribution, therefore no special - treatment will be considered. - type: string - tag: - description: Specifies the tag for the Istio docker images. - type: string - variant: - description: The variant of the Istio container images to - use. Options are "debug" or "distroless". Unset will use - the default for the given version. - type: string - type: object - ztunnel: - description: Configuration for the Istio ztunnel plugin. - properties: - Annotations: - additionalProperties: - type: string - description: Annotations to apply to all top level resources - type: object - Labels: - additionalProperties: - type: string - description: Labels to apply to all top level resources - type: object - caAddress: - description: The address of the CA for CSR. - type: string - env: - additionalProperties: - type: string - description: 'A `key: value` mapping of environment variables - to add to the pod' - type: object - hub: - description: Hub to pull the container image from. Image will - be `Hub/Image:Tag-Variant`. - type: string - image: - description: |- - Image name to pull from. Image will be `Hub/Image:Tag-Variant`. - If Image contains a "/", it will replace the entire `image` in the pod. - type: string - imagePullPolicy: - description: |- - Specifies the image pull policy for the Istio images. one of Always, Never, IfNotPresent. - Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. - - More info: https://kubernetes.io/docs/concepts/containers/images#updating-images - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - description: |- - List of secret names to add to the service account as image pull secrets - to use for pulling any images in pods that reference this ServiceAccount. - Must be set for any cluster configured with private docker registry. - items: - type: string - type: array - istioNamespace: - description: Specifies the default namespace for the Istio - control plane components. - type: string - logAsJSON: - description: Specifies whether istio components should output - logs in json format by adding --log_as_json argument to - each container. - type: boolean - logging: - description: Same as `global.logging.level`, but will override - it if set - properties: - level: - description: |- - Comma-separated minimum per-scope logging level of messages to output, in the form of :,: - The control plane has different scopes depending on component, but can configure default log level across all components - If empty, default scope and level will be used as configured in code - type: string - type: object - meshConfig: - description: |- - meshConfig defines runtime configuration of components. - For ztunnel, only defaultConfig is used, but this is nested under `meshConfig` for consistency with other components. - properties: - accessLogEncoding: - description: |- - Encoding for the proxy access log (`TEXT` or `JSON`). - Default value is `TEXT`. - enum: - - TEXT - - JSON - type: string - accessLogFile: - description: |- - File address for the proxy access log (e.g. /dev/stdout). - Empty value disables access logging. - type: string - accessLogFormat: - description: |- - Format for the proxy access log - Empty value results in proxy's default access log format - type: string - ca: - description: |- - If specified, Istiod will authorize and forward the CSRs from the workloads to the specified external CA - using the Istio CA gRPC API. - properties: - address: - description: |- - REQUIRED. Address of the CA server implementing the Istio CA gRPC API. - Can be IP address or a fully qualified DNS name with port - Eg: custom-ca.default.svc.cluster.local:8932, 192.168.23.2:9000 - type: string - istiodSide: - description: |- - Use istiodSide to specify CA Server integrate to Istiod side or Agent side - Default: true - type: boolean - requestTimeout: - description: |- - timeout for forward CSR requests from Istiod to External CA - Default: 10s - type: string - tlsSettings: - description: |- - Use the tlsSettings to specify the tls mode to use. - Regarding tlsSettings: - - DISABLE MODE is legitimate for the case Istiod is making the request via an Envoy sidecar. - DISABLE MODE can also be used for testing - - TLS MUTUAL MODE be on by default. If the CA certificates - (cert bundle to verify the CA server's certificate) is omitted, Istiod will - use the system root certs to verify the CA server's certificate. - properties: - caCertificates: - description: |- - OPTIONAL: The path to the file containing certificate authority - certificates to use in verifying a presented server certificate. If - omitted, the proxy will verify the server's certificate using - the OS CA certificates. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - caCrl: - description: |- - OPTIONAL: The path to the file containing the certificate revocation list (CRL) - to use in verifying a presented server certificate. `CRL` is a list of certificates - that have been revoked by the CA (Certificate Authority) before their scheduled expiration date. - If specified, the proxy will verify if the presented certificate is part of the revoked list of certificates. - If omitted, the proxy will not verify the certificate against the `crl`. Note that if `credentialName` is set, - `CRL` cannot be specified using `caCrl`, rather it has to be specified inside the credential. - type: string - clientCertificate: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client-side TLS certificate to use. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - credentialName: - description: |- - The name of the secret that holds the TLS certs for the - client including the CA certificates. This secret must exist in - the namespace of the proxy using the certificates. - An Opaque secret should contain the following keys and values: - `key: `, `cert: `, `cacert: `, - `crl: ` - Here CACertificate is used to verify the server certificate. - For mutual TLS, `cacert: ` can be provided in the - same secret or a separate secret named `-cacert`. - A TLS secret for client certificates with an additional - `ca.crt` key for CA certificates and `ca.crl` key for - certificate revocation list(CRL) is also supported. - Only one of client certificates and CA certificate - or credentialName can be specified. - - **NOTE:** This field is applicable at sidecars only if - `DestinationRule` has a `workloadSelector` specified. - Otherwise the field will be applicable only at gateways, and - sidecars will continue to use the certificate paths. - type: string - insecureSkipVerify: - description: |- - `insecureSkipVerify` specifies whether the proxy should skip verifying the - CA signature and SAN for the server certificate corresponding to the host. - The default value of this field is false. - type: boolean - mode: - description: |- - Indicates whether connections to this port should be secured - using TLS. The value of this field determines how TLS is enforced. - enum: - - DISABLE - - SIMPLE - - MUTUAL - - ISTIO_MUTUAL - type: string - privateKey: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client's private key. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - sni: - description: |- - SNI string to present to the server during TLS handshake. - If unspecified, SNI will be automatically set based on downstream HTTP - host/authority header for SIMPLE and MUTUAL TLS modes. - type: string - subjectAltNames: - description: |- - A list of alternate names to verify the subject identity in the - certificate. If specified, the proxy will verify that the server - certificate's subject alt name matches one of the specified values. - If specified, this list overrides the value of subject_alt_names - from the ServiceEntry. If unspecified, automatic validation of upstream - presented certificate for new upstream connections will be done based on the - downstream HTTP host/authority header. - items: - type: string - type: array - type: object - required: - - address - type: object - caCertificates: - description: |- - The extra root certificates for workload-to-workload communication. - The plugin certificates (the 'cacerts' secret) or self-signed certificates (the 'istio-ca-secret' secret) - are automatically added by Istiod. - The CA certificate that signs the workload certificates is automatically added by Istio Agent. - items: - properties: - certSigners: - description: |- - when Istiod is acting as RA(registration authority) - If set, they are used for these signers. Otherwise, this trustAnchor is used for all signers. - items: - type: string - type: array - pem: - description: The PEM data of the certificate. - type: string - spiffeBundleUrl: - description: |- - The SPIFFE bundle endpoint URL that complies to: - https://github.com/spiffe/spiffe/blob/master/standards/SPIFFE_Trust_Domain_and_Bundle.md#the-spiffe-trust-domain-and-bundle - The endpoint should support authentication based on Web PKI: - https://github.com/spiffe/spiffe/blob/master/standards/SPIFFE_Trust_Domain_and_Bundle.md#521-web-pki - The certificate is retrieved from the endpoint. - type: string - trustDomains: - description: |- - Optional. Specify the list of trust domains to which this trustAnchor data belongs. - If set, they are used for these trust domains. Otherwise, this trustAnchor is used for default trust domain - and its aliases. - Note that we can have multiple trustAnchor data for a same trustDomain. - In that case, trustAnchors with a same trust domain will be merged and used together to verify peer certificates. - If neither certSigners nor trustDomains is set, this trustAnchor is used for all trust domains and all signers. - If only trustDomains is set, this trustAnchor is used for these trustDomains and all signers. - If only certSigners is set, this trustAnchor is used for these certSigners and all trust domains. - If both certSigners and trustDomains is set, this trustAnchor is only used for these signers and trust domains. - items: - type: string - type: array - type: object - x-kubernetes-validations: - - message: At most one of [pem spiffeBundleUrl] should - be set - rule: (has(self.pem)?1:0) + (has(self.spiffeBundleUrl)?1:0) - <= 1 - type: array - certificates: - description: |- - Configure the provision of certificates. - - Note: Deprecated, please refer to Cert-Manager or other cert provisioning solutions to sign DNS certificates. - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - items: - description: "Certificate configures the provision of - a certificate and its key.\nExample 1: key and cert - stored in a secret\n```\n{ secretName: galley-cert\n\n\t - \ secretNamespace: istio-system\n\t dnsNames:\n\t - \ - galley.istio-system.svc\n\t - galley.mydomain.com\n\t}\n\n```\nExample - 2: key and cert stored in a directory\n```\n{ dnsNames:\n - \ - pilot.istio-system\n - pilot.istio-system.svc\n - \ - pilot.mydomain.com\n }\n\n```" - properties: - dnsNames: - description: |- - The DNS names for the certificate. A certificate may contain - multiple DNS names. - items: - type: string - type: array - secretName: - description: |- - Name of the secret the certificate and its key will be stored into. - If it is empty, it will not be stored into a secret. - Instead, the certificate and its key will be stored into a hard-coded directory. - type: string - type: object - type: array - configSources: - description: |- - ConfigSource describes a source of configuration data for networking - rules, and other Istio configuration artifacts. Multiple data sources - can be configured for a single control plane. - items: - description: |- - ConfigSource describes information about a configuration store inside a - mesh. A single control plane instance can interact with one or more data - sources. - properties: - address: - description: |- - Address of the server implementing the Istio Mesh Configuration - protocol (MCP). Can be IP address or a fully qualified DNS name. - Use xds:// to specify a grpc-based xds backend, k8s:// to specify a k8s controller or - fs:/// to specify a file-based backend with absolute path to the directory. - type: string - subscribedResources: - description: Describes the source of configuration, - if nothing is specified default is MCP - items: - description: Resource describes the source of - configuration - enum: - - SERVICE_REGISTRY - type: string - type: array - tlsSettings: - description: |- - Use the tlsSettings to specify the tls mode to use. If the MCP server - uses Istio mutual TLS and shares the root CA with Pilot, specify the TLS - mode as `ISTIO_MUTUAL`. - properties: - caCertificates: - description: |- - OPTIONAL: The path to the file containing certificate authority - certificates to use in verifying a presented server certificate. If - omitted, the proxy will verify the server's certificate using - the OS CA certificates. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - caCrl: - description: |- - OPTIONAL: The path to the file containing the certificate revocation list (CRL) - to use in verifying a presented server certificate. `CRL` is a list of certificates - that have been revoked by the CA (Certificate Authority) before their scheduled expiration date. - If specified, the proxy will verify if the presented certificate is part of the revoked list of certificates. - If omitted, the proxy will not verify the certificate against the `crl`. Note that if `credentialName` is set, - `CRL` cannot be specified using `caCrl`, rather it has to be specified inside the credential. - type: string - clientCertificate: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client-side TLS certificate to use. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - credentialName: - description: |- - The name of the secret that holds the TLS certs for the - client including the CA certificates. This secret must exist in - the namespace of the proxy using the certificates. - An Opaque secret should contain the following keys and values: - `key: `, `cert: `, `cacert: `, - `crl: ` - Here CACertificate is used to verify the server certificate. - For mutual TLS, `cacert: ` can be provided in the - same secret or a separate secret named `-cacert`. - A TLS secret for client certificates with an additional - `ca.crt` key for CA certificates and `ca.crl` key for - certificate revocation list(CRL) is also supported. - Only one of client certificates and CA certificate - or credentialName can be specified. - - **NOTE:** This field is applicable at sidecars only if - `DestinationRule` has a `workloadSelector` specified. - Otherwise the field will be applicable only at gateways, and - sidecars will continue to use the certificate paths. - type: string - insecureSkipVerify: - description: |- - `insecureSkipVerify` specifies whether the proxy should skip verifying the - CA signature and SAN for the server certificate corresponding to the host. - The default value of this field is false. - type: boolean - mode: - description: |- - Indicates whether connections to this port should be secured - using TLS. The value of this field determines how TLS is enforced. - enum: - - DISABLE - - SIMPLE - - MUTUAL - - ISTIO_MUTUAL - type: string - privateKey: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client's private key. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - sni: - description: |- - SNI string to present to the server during TLS handshake. - If unspecified, SNI will be automatically set based on downstream HTTP - host/authority header for SIMPLE and MUTUAL TLS modes. - type: string - subjectAltNames: - description: |- - A list of alternate names to verify the subject identity in the - certificate. If specified, the proxy will verify that the server - certificate's subject alt name matches one of the specified values. - If specified, this list overrides the value of subject_alt_names - from the ServiceEntry. If unspecified, automatic validation of upstream - presented certificate for new upstream connections will be done based on the - downstream HTTP host/authority header. - items: - type: string - type: array - type: object - type: object - type: array - connectTimeout: - description: |- - Connection timeout used by Envoy. (MUST BE >=1ms) - Default timeout is 10s. - type: string - defaultConfig: - description: |- - Default proxy config used by gateway and sidecars. - In case of Kubernetes, the proxy config is applied once during the injection process, - and remain constant for the duration of the pod. The rest of the mesh config can be changed - at runtime and config gets distributed dynamically. - On Kubernetes, this can be overridden on individual pods with the `proxy.istio.io/config` annotation. - properties: - availabilityZone: - description: 'Deprecated: Marked as deprecated in - mesh/v1alpha1/proxy.proto.' - type: string - binaryPath: - description: Path to the proxy binary - type: string - caCertificatesPem: - description: |- - The PEM data of the extra root certificates for workload-to-workload communication. - This includes the certificates defined in MeshConfig and any other certificates that Istiod uses as CA. - The plugin certificates (the 'cacerts' secret), self-signed certificates (the 'istio-ca-secret' secret) - are added automatically by Istiod. - items: - type: string - type: array - concurrency: - description: |- - The number of worker threads to run. - If unset, which is recommended, this will be automatically determined based on CPU requests/limits. - If set to 0, all cores on the machine will be used, ignoring CPU requests or limits. This can lead to major performance - issues if CPU limits are also set. - format: int32 - type: integer - configPath: - description: |- - Path to the generated configuration file directory. - Proxy agent generates the actual configuration and stores it in this directory. - type: string - controlPlaneAuthPolicy: - description: |- - AuthenticationPolicy defines how the proxy is authenticated when it connects to the control plane. - Default is set to `MUTUAL_TLS`. - enum: - - NONE - - MUTUAL_TLS - - INHERIT - type: string - customConfigFile: - description: |- - File path of custom proxy configuration, currently used by proxies - in front of Mixer and Pilot. - type: string - discoveryAddress: - description: |- - Address of the discovery service exposing xDS with mTLS connection. - The inject configuration may override this value. - type: string - discoveryRefreshDelay: - description: 'Deprecated: Marked as deprecated in - mesh/v1alpha1/proxy.proto.' - type: string - drainDuration: - description: |- - restart. MUST be >=1s (e.g., _1s/1m/1h_) - Default drain duration is `45s`. - type: string - envoyAccessLogService: - description: |- - Address of the service to which access logs from Envoys should be - sent. (e.g. `accesslog-service:15000`). See [Access Log - Service](https://www.envoyproxy.io/docs/envoy/latest/api-v2/config/accesslog/v2/als.proto) - for details about Envoy's gRPC Access Log Service API. - properties: - address: - description: |- - Address of a remove service used for various purposes (access log - receiver, metrics receiver, etc.). Can be IP address or a fully - qualified DNS name. - type: string - tcpKeepalive: - description: If set then set `SO_KEEPALIVE` on - the socket to enable TCP Keepalives. - properties: - interval: - description: |- - The time duration between keep-alive probes. - Default is to use the OS level configuration - (unless overridden, Linux defaults to 75s.) - type: string - probes: - description: |- - Maximum number of keepalive probes to send without response before - deciding the connection is dead. Default is to use the OS level configuration - (unless overridden, Linux defaults to 9.) - format: int32 - type: integer - time: - description: |- - The time duration a connection needs to be idle before keep-alive - probes start being sent. Default is to use the OS level configuration - (unless overridden, Linux defaults to 7200s (ie 2 hours.) - type: string - type: object - tlsSettings: - description: |- - Use the `tlsSettings` to specify the tls mode to use. If the remote service - uses Istio mutual TLS and shares the root CA with Pilot, specify the TLS - mode as `ISTIO_MUTUAL`. - properties: - caCertificates: - description: |- - OPTIONAL: The path to the file containing certificate authority - certificates to use in verifying a presented server certificate. If - omitted, the proxy will verify the server's certificate using - the OS CA certificates. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - caCrl: - description: |- - OPTIONAL: The path to the file containing the certificate revocation list (CRL) - to use in verifying a presented server certificate. `CRL` is a list of certificates - that have been revoked by the CA (Certificate Authority) before their scheduled expiration date. - If specified, the proxy will verify if the presented certificate is part of the revoked list of certificates. - If omitted, the proxy will not verify the certificate against the `crl`. Note that if `credentialName` is set, - `CRL` cannot be specified using `caCrl`, rather it has to be specified inside the credential. - type: string - clientCertificate: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client-side TLS certificate to use. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - credentialName: - description: |- - The name of the secret that holds the TLS certs for the - client including the CA certificates. This secret must exist in - the namespace of the proxy using the certificates. - An Opaque secret should contain the following keys and values: - `key: `, `cert: `, `cacert: `, - `crl: ` - Here CACertificate is used to verify the server certificate. - For mutual TLS, `cacert: ` can be provided in the - same secret or a separate secret named `-cacert`. - A TLS secret for client certificates with an additional - `ca.crt` key for CA certificates and `ca.crl` key for - certificate revocation list(CRL) is also supported. - Only one of client certificates and CA certificate - or credentialName can be specified. - - **NOTE:** This field is applicable at sidecars only if - `DestinationRule` has a `workloadSelector` specified. - Otherwise the field will be applicable only at gateways, and - sidecars will continue to use the certificate paths. - type: string - insecureSkipVerify: - description: |- - `insecureSkipVerify` specifies whether the proxy should skip verifying the - CA signature and SAN for the server certificate corresponding to the host. - The default value of this field is false. - type: boolean - mode: - description: |- - Indicates whether connections to this port should be secured - using TLS. The value of this field determines how TLS is enforced. - enum: - - DISABLE - - SIMPLE - - MUTUAL - - ISTIO_MUTUAL - type: string - privateKey: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client's private key. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - sni: - description: |- - SNI string to present to the server during TLS handshake. - If unspecified, SNI will be automatically set based on downstream HTTP - host/authority header for SIMPLE and MUTUAL TLS modes. - type: string - subjectAltNames: - description: |- - A list of alternate names to verify the subject identity in the - certificate. If specified, the proxy will verify that the server - certificate's subject alt name matches one of the specified values. - If specified, this list overrides the value of subject_alt_names - from the ServiceEntry. If unspecified, automatic validation of upstream - presented certificate for new upstream connections will be done based on the - downstream HTTP host/authority header. - items: - type: string - type: array - type: object - type: object - envoyMetricsService: - description: |- - Address of the Envoy Metrics Service implementation (e.g. `metrics-service:15000`). - See [Metric Service](https://www.envoyproxy.io/docs/envoy/latest/api-v2/config/metrics/v2/metrics_service.proto) - for details about Envoy's Metrics Service API. - properties: - address: - description: |- - Address of a remove service used for various purposes (access log - receiver, metrics receiver, etc.). Can be IP address or a fully - qualified DNS name. - type: string - tcpKeepalive: - description: If set then set `SO_KEEPALIVE` on - the socket to enable TCP Keepalives. - properties: - interval: - description: |- - The time duration between keep-alive probes. - Default is to use the OS level configuration - (unless overridden, Linux defaults to 75s.) - type: string - probes: - description: |- - Maximum number of keepalive probes to send without response before - deciding the connection is dead. Default is to use the OS level configuration - (unless overridden, Linux defaults to 9.) - format: int32 - type: integer - time: - description: |- - The time duration a connection needs to be idle before keep-alive - probes start being sent. Default is to use the OS level configuration - (unless overridden, Linux defaults to 7200s (ie 2 hours.) - type: string - type: object - tlsSettings: - description: |- - Use the `tlsSettings` to specify the tls mode to use. If the remote service - uses Istio mutual TLS and shares the root CA with Pilot, specify the TLS - mode as `ISTIO_MUTUAL`. - properties: - caCertificates: - description: |- - OPTIONAL: The path to the file containing certificate authority - certificates to use in verifying a presented server certificate. If - omitted, the proxy will verify the server's certificate using - the OS CA certificates. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - caCrl: - description: |- - OPTIONAL: The path to the file containing the certificate revocation list (CRL) - to use in verifying a presented server certificate. `CRL` is a list of certificates - that have been revoked by the CA (Certificate Authority) before their scheduled expiration date. - If specified, the proxy will verify if the presented certificate is part of the revoked list of certificates. - If omitted, the proxy will not verify the certificate against the `crl`. Note that if `credentialName` is set, - `CRL` cannot be specified using `caCrl`, rather it has to be specified inside the credential. - type: string - clientCertificate: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client-side TLS certificate to use. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - credentialName: - description: |- - The name of the secret that holds the TLS certs for the - client including the CA certificates. This secret must exist in - the namespace of the proxy using the certificates. - An Opaque secret should contain the following keys and values: - `key: `, `cert: `, `cacert: `, - `crl: ` - Here CACertificate is used to verify the server certificate. - For mutual TLS, `cacert: ` can be provided in the - same secret or a separate secret named `-cacert`. - A TLS secret for client certificates with an additional - `ca.crt` key for CA certificates and `ca.crl` key for - certificate revocation list(CRL) is also supported. - Only one of client certificates and CA certificate - or credentialName can be specified. - - **NOTE:** This field is applicable at sidecars only if - `DestinationRule` has a `workloadSelector` specified. - Otherwise the field will be applicable only at gateways, and - sidecars will continue to use the certificate paths. - type: string - insecureSkipVerify: - description: |- - `insecureSkipVerify` specifies whether the proxy should skip verifying the - CA signature and SAN for the server certificate corresponding to the host. - The default value of this field is false. - type: boolean - mode: - description: |- - Indicates whether connections to this port should be secured - using TLS. The value of this field determines how TLS is enforced. - enum: - - DISABLE - - SIMPLE - - MUTUAL - - ISTIO_MUTUAL - type: string - privateKey: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client's private key. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - sni: - description: |- - SNI string to present to the server during TLS handshake. - If unspecified, SNI will be automatically set based on downstream HTTP - host/authority header for SIMPLE and MUTUAL TLS modes. - type: string - subjectAltNames: - description: |- - A list of alternate names to verify the subject identity in the - certificate. If specified, the proxy will verify that the server - certificate's subject alt name matches one of the specified values. - If specified, this list overrides the value of subject_alt_names - from the ServiceEntry. If unspecified, automatic validation of upstream - presented certificate for new upstream connections will be done based on the - downstream HTTP host/authority header. - items: - type: string - type: array - type: object - type: object - envoyMetricsServiceAddress: - description: 'Deprecated: Marked as deprecated in - mesh/v1alpha1/proxy.proto.' - type: string - extraStatTags: - description: |- - An additional list of tags to extract from the in-proxy Istio telemetry. These extra tags can be - added by configuring the telemetry extension. Each additional tag needs to be present in this list. - Extra tags emitted by the telemetry extensions must be listed here so that they can be processed - and exposed as Prometheus metrics. - Deprecated: `istio.stats` is a native filter now, this field is no longer needed. - items: - type: string - type: array - gatewayTopology: - description: |- - Topology encapsulates the configuration which describes where the proxy is - located i.e. behind a (or N) trusted proxy (proxies) or directly exposed - to the internet. This configuration only effects gateways and is applied - to all the gateways in the cluster unless overridden via annotations of the - gateway workloads. - properties: - forwardClientCertDetails: - description: |- - Configures how the gateway proxy handles x-forwarded-client-cert (XFCC) - header in the incoming request. - enum: - - UNDEFINED - - SANITIZE - - FORWARD_ONLY - - APPEND_FORWARD - - SANITIZE_SET - - ALWAYS_FORWARD_ONLY - type: string - numTrustedProxies: - description: |- - Number of trusted proxies deployed in front of the Istio gateway proxy. - When this option is set to value N greater than zero, the trusted client - address is assumed to be the Nth address from the right end of the - X-Forwarded-For (XFF) header from the incoming request. If the - X-Forwarded-For (XFF) header is missing or has fewer than N addresses, the - gateway proxy falls back to using the immediate downstream connection's - source address as the trusted client address. - Note that the gateway proxy will append the downstream connection's source - address to the X-Forwarded-For (XFF) address and set the - X-Envoy-External-Address header to the trusted client address before - forwarding it to the upstream services in the cluster. - The default value of numTrustedProxies is 0. - See [Envoy XFF](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#config-http-conn-man-headers-x-forwarded-for) - header handling for more details. - format: int32 - type: integer - proxyProtocol: - description: |- - Enables [PROXY protocol](http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt) for - downstream connections on a gateway. - type: object - type: object - holdApplicationUntilProxyStarts: - description: |- - Boolean flag for enabling/disabling the holdApplicationUntilProxyStarts behavior. - This feature adds hooks to delay application startup until the pod proxy - is ready to accept traffic, mitigating some startup race conditions. - Default value is 'false'. - type: boolean - image: - description: Specifies the details of the proxy image. - properties: - imageType: - description: |- - The image type of the image. - Istio publishes default, debug, and distroless images. - Other values are allowed if those image types (example: centos) are published to the specified hub. - supported values: default, debug, distroless. - type: string - type: object - interceptionMode: - description: The mode used to redirect inbound traffic - to Envoy. - enum: - - REDIRECT - - TPROXY - - NONE - type: string - meshId: - description: |- - The unique identifier for the [service mesh](https://istio.io/docs/reference/glossary/#service-mesh) - All control planes running in the same service mesh should specify the same mesh ID. - Mesh ID is used to label telemetry reports for cases where telemetry from multiple meshes is mixed together. - type: string - privateKeyProvider: - description: Specifies the details of the Private - Key Provider configuration for gateway and sidecar - proxies. - properties: - cryptomb: - description: Use CryptoMb private key provider - properties: - fallback: - description: |- - If the private key provider isn’t available (eg. the required hardware capability doesn’t existed) - Envoy will fallback to the BoringSSL default implementation when the fallback is true. - The default value is false. - type: boolean - pollDelay: - description: |- - How long to wait until the per-thread processing queue should be processed. If the processing queue - gets full (eight sign or decrypt requests are received) it is processed immediately. - However, if the queue is not filled before the delay has expired, the requests already in the queue - are processed, even if the queue is not full. - In effect, this value controls the balance between latency and throughput. - The duration needs to be set to a value greater than or equal to 1 millisecond. - type: string - type: object - qat: - description: Use QAT private key provider - properties: - fallback: - description: |- - If the private key provider isn’t available (eg. the required hardware capability doesn’t existed) - Envoy will fallback to the BoringSSL default implementation when the fallback is true. - The default value is false. - type: boolean - pollDelay: - description: |- - How long to wait before polling the hardware accelerator after a request has been submitted there. - Having a small value leads to quicker answers from the hardware but causes more polling loop spins, - leading to potentially larger CPU usage. - The duration needs to be set to a value greater than or equal to 1 millisecond. - type: string - type: object - type: object - x-kubernetes-validations: - - message: At most one of [cryptomb qat] should be - set - rule: (has(self.cryptomb)?1:0) + (has(self.qat)?1:0) - <= 1 - proxyAdminPort: - description: |- - Port on which Envoy should listen for administrative commands. - Default port is `15000`. - format: int32 - type: integer - proxyBootstrapTemplatePath: - description: Path to the proxy bootstrap template - file - type: string - proxyHeaders: - description: "Define the set of headers to add/modify - for HTTP request/responses.\n\nTo enable an optional - header, simply set the field. If no specific configuration - is required, an empty object (`{}`) will enable - it.\nNote: currently all headers are enabled by - default.\n\nBelow shows an example of customizing - the `server` header and disabling the `X-Envoy-Attempt-Count` - header:\n\n```yaml\nproxyHeaders:\n\n\tserver:\n\t - \ value: \"my-custom-server\"\n\trequestId: {} // - Explicitly enable Request IDs. As this is the default, - this has no effect.\n\tattemptCount:\n\t disabled: - true\n\n```\n\nSome headers are enabled by default, - and require explicitly disabling. See below for - an example of disabling all default-enabled headers:\n\n```yaml\nproxyHeaders:\n\n\tforwardedClientCert: - SANITIZE\n\tserver:\n\t disabled: true\n\trequestId:\n\t - \ disabled: true\n\tattemptCount:\n\t disabled: - true\n\tenvoyDebugHeaders:\n\t disabled: true\n\tmetadataExchangeHeaders:\n\t - \ mode: IN_MESH\n\n```" - properties: - attemptCount: - description: |- - Controls the `X-Envoy-Attempt-Count` header. - If enabled, this header will be added on outbound request headers (including gateways) that have retries configured. - If disabled, this header will not be set. If it is already present, it will be preserved. - This header is enabled by default if not configured. - properties: - disabled: - type: boolean - type: object - envoyDebugHeaders: - description: |- - Controls various `X-Envoy-*` headers, such as `X-Envoy-Overloaded` and `X-Envoy-Upstream-Service-Time`. If enabled, - these headers will be included. - If disabled, these headers will not be set. If they are already present, they will be preserved. - See the [Envoy documentation](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/router/v3/router.proto#envoy-v3-api-field-extensions-filters-http-router-v3-router-suppress-envoy-headers) for more details. - These headers are enabled by default if not configured. - properties: - disabled: - type: boolean - type: object - forwardedClientCert: - description: |- - Controls the `X-Forwarded-Client-Cert` header for inbound sidecar requests. To set this on gateways, use the `Topology` setting. - To disable the header, configure either `SANITIZE` (to always remove the header, if present) or `FORWARD_ONLY` (to leave the header as-is). - By default, `APPEND_FORWARD` will be used. - enum: - - UNDEFINED - - SANITIZE - - FORWARD_ONLY - - APPEND_FORWARD - - SANITIZE_SET - - ALWAYS_FORWARD_ONLY - type: string - metadataExchangeHeaders: - description: |- - Controls Istio metadata exchange headers `X-Envoy-Peer-Metadata` and `X-Envoy-Peer-Metadata-Id`. - By default, the behavior is unspecified. - If IN_MESH, these headers will not be appended to outbound requests from sidecars to services not in-mesh. - properties: - mode: - enum: - - UNDEFINED - - IN_MESH - type: string - type: object - requestId: - description: |- - Controls the `X-Request-Id` header. If enabled, a request ID is generated for each request if one is not already set. - This applies to all types of traffic (inbound, outbound, and gateways). - If disabled, no request ID will be generate for the request. If it is already present, it will be preserved. - Warning: request IDs are a critical component to mesh tracing and logging, so disabling this is not recommended. - This header is enabled by default if not configured. - properties: - disabled: - type: boolean - type: object - server: - description: |- - Controls the `server` header. If enabled, the `Server: istio-envoy` header is set in response headers for inbound traffic (including gateways). - If disabled, the `Server` header is not modified. If it is already present, it will be preserved. - properties: - disabled: - type: boolean - value: - description: If set, and the server header - is enabled, this value will be set as the - server header. By default, `istio-envoy` - will be used. - type: string - type: object - setCurrentClientCertDetails: - description: |- - This field is valid only when forward_client_cert_details is APPEND_FORWARD or SANITIZE_SET - and the client connection is mTLS. It specifies the fields in - the client certificate to be forwarded. Note that `Hash` is always set, and - `By` is always set when the client certificate presents the URI type Subject Alternative Name value. - properties: - cert: - description: |- - Whether to forward the entire client cert in URL encoded PEM format. This will appear in the - XFCC header comma separated from other values with the value Cert="PEM". - Defaults to false. - type: boolean - chain: - description: |- - Whether to forward the entire client cert chain (including the leaf cert) in URL encoded PEM - format. This will appear in the XFCC header comma separated from other values with the value - Chain="PEM". - Defaults to false. - type: boolean - dns: - description: |- - Whether to forward the DNS type Subject Alternative Names of the client cert. - Defaults to true. - type: boolean - subject: - description: Whether to forward the subject - of the client cert. Defaults to true. - type: boolean - uri: - description: |- - Whether to forward the URI type Subject Alternative Name of the client cert. Defaults to - true. - type: boolean - type: object - type: object - proxyMetadata: - additionalProperties: - type: string - description: |- - Additional environment variables for the proxy. - Names starting with `ISTIO_META_` will be included in the generated bootstrap and sent to the XDS server. - type: object - proxyStatsMatcher: - description: "Proxy stats matcher defines configuration - for reporting custom Envoy stats.\nTo reduce memory - and CPU overhead from Envoy stats system, Istio - proxies by\ndefault create and expose only a subset - of Envoy stats. This option is to\ncontrol creation - of additional Envoy stats with prefix, suffix, and - regex\nexpressions match on the name of the stats. - This replaces the stats\ninclusion annotations\n(`sidecar.istio.io/statsInclusionPrefixes`,\n`sidecar.istio.io/statsInclusionRegexps`, - and\n`sidecar.istio.io/statsInclusionSuffixes`). - For example, to enable stats\nfor circuit breakers, - request retries, upstream connections, and request - timeouts,\nyou can specify stats matcher as follows:\n```yaml\nproxyStatsMatcher:\n\n\tinclusionRegexps:\n\t - \ - .*outlier_detection.*\n\t - .*upstream_rq_retry.*\n\t - \ - .*upstream_cx_.*\n\tinclusionSuffixes:\n\t - - upstream_rq_timeout\n\n```\nNote including more - Envoy stats might increase number of time series\ncollected - by prometheus significantly. Care needs to be taken - on Prometheus\nresource provision and configuration - to reduce cardinality." - properties: - inclusionPrefixes: - description: Proxy stats name prefix matcher for - inclusion. - items: - type: string - type: array - inclusionRegexps: - description: Proxy stats name regexps matcher - for inclusion. - items: - type: string - type: array - inclusionSuffixes: - description: Proxy stats name suffix matcher for - inclusion. - items: - type: string - type: array - type: object - readinessProbe: - description: |- - VM Health Checking readiness probe. This health check config exactly mirrors the - kubernetes readiness probe configuration both in schema and logic. - Only one health check method of 3 can be set at a time. - properties: - exec: - description: Exec specifies the action to take. - properties: - command: - description: |- - Command is the command line to execute inside the container, the working directory for the - command is root ('/') in the container's filesystem. The command is simply exec'd, it is - not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use - a shell, you need to explicitly call out to that shell. - Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - description: |- - Minimum consecutive failures for the probe to be considered failed after having succeeded. - Defaults to 3. Minimum value is 1. - format: int32 - type: integer - grpc: - description: GRPC specifies an action involving - a GRPC port. - properties: - port: - description: Port number of the gRPC service. - Number must be in the range 1 to 65535. - format: int32 - type: integer - service: - default: "" - description: |- - Service is the name of the service to place in the gRPC HealthCheckRequest - (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). - - If this is not specified, the default behavior is defined by gRPC. - type: string - required: - - port - type: object - httpGet: - description: HTTPGet specifies the http request - to perform. - properties: - host: - description: |- - Host name to connect to, defaults to the pod IP. You probably want to set - "Host" in httpHeaders instead. - type: string - httpHeaders: - description: Custom headers to set in the - request. HTTP allows repeated headers. - items: - description: HTTPHeader describes a custom - header to be used in HTTP probes - properties: - name: - description: |- - The header field name. - This will be canonicalized upon output, so case-variant names will be understood as the same header. - type: string - value: - description: The header field value - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - description: Path to access on the HTTP server. - type: string - port: - anyOf: - - type: integer - - type: string - description: |- - Name or number of the port to access on the container. - Number must be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - x-kubernetes-int-or-string: true - scheme: - description: |- - Scheme to use for connecting to the host. - Defaults to HTTP. - type: string - required: - - port - type: object - initialDelaySeconds: - description: |- - Number of seconds after the container has started before liveness probes are initiated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - format: int32 - type: integer - periodSeconds: - description: |- - How often (in seconds) to perform the probe. - Default to 10 seconds. Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - Minimum consecutive successes for the probe to be considered successful after having failed. - Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. - format: int32 - type: integer - tcpSocket: - description: TCPSocket specifies an action involving - a TCP port. - properties: - host: - description: 'Optional: Host name to connect - to, defaults to the pod IP.' - type: string - port: - anyOf: - - type: integer - - type: string - description: |- - Number or name of the port to access on the container. - Number must be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - description: |- - Optional duration in seconds the pod needs to terminate gracefully upon probe failure. - The grace period is the duration in seconds after the processes running in the pod are sent - a termination signal and the time when the processes are forcibly halted with a kill signal. - Set this value longer than the expected cleanup time for your process. - If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this - value overrides the value provided by the pod spec. - Value must be non-negative integer. The value zero indicates stop immediately via - the kill signal (no opportunity to shut down). - This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. - Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset. - format: int64 - type: integer - timeoutSeconds: - description: |- - Number of seconds after which the probe times out. - Defaults to 1 second. Minimum value is 1. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - format: int32 - type: integer - type: object - runtimeValues: - additionalProperties: - type: string - description: |- - Envoy [runtime configuration](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/operations/runtime) to set during bootstrapping. - This enables setting experimental, unsafe, unsupported, and deprecated features that should be used with extreme caution. - type: object - sds: - description: |- - Secret Discovery Service(SDS) configuration to be used by the proxy. - - Deprecated: Marked as deprecated in mesh/v1alpha1/proxy.proto. - properties: - enabled: - description: True if SDS is enabled. - type: boolean - k8sSaJwtPath: - description: Path of k8s service account JWT path. - type: string - type: object - serviceCluster: - description: |- - Service cluster defines the name for the `service_cluster` that is - shared by all Envoy instances. This setting corresponds to - `--service-cluster` flag in Envoy. In a typical Envoy deployment, the - `service-cluster` flag is used to identify the caller, for - source-based routing scenarios. - - Since Istio does not assign a local `service/service` version to each - Envoy instance, the name is same for all of them. However, the - source/caller's identity (e.g., IP address) is encoded in the - `--service-node` flag when launching Envoy. When the RDS service - receives API calls from Envoy, it uses the value of the `service-node` - flag to compute routes that are relative to the service instances - located at that IP address. - type: string - statNameLength: - description: |- - Maximum length of name field in Envoy's metrics. The length of the name field - is determined by the length of a name field in a service and the set of labels that - comprise a particular version of the service. The default value is set to 189 characters. - Envoy's internal metrics take up 67 characters, for a total of 256 character name per metric. - Increase the value of this field if you find that the metrics from Envoys are truncated. - format: int32 - type: integer - statsdUdpAddress: - description: IP Address and Port of a statsd UDP listener - (e.g. `10.75.241.127:9125`). - type: string - statusPort: - description: |- - Port on which the agent should listen for administrative commands such as readiness probe. - Default is set to port `15020`. - format: int32 - type: integer - terminationDrainDuration: - description: |- - The amount of time allowed for connections to complete on proxy shutdown. - On receiving `SIGTERM` or `SIGINT`, `istio-agent` tells the active Envoy to start gracefully draining, - discouraging any new connections and allowing existing connections to complete. It then - sleeps for the `terminationDrainDuration` and then kills any remaining active Envoy processes. - If not set, a default of `5s` will be applied. - type: string - tracing: - description: Tracing configuration to be used by the - proxy. - properties: - customTags: - additionalProperties: - description: |- - Configure custom tags that will be added to any active span. - Tags can be generated via literals, environment variables or an incoming request header. - properties: - environment: - description: |- - The custom tag's value should be populated from an environmental - variable - properties: - defaultValue: - description: |- - When the environment variable is not found, - the tag's value will be populated with this default value if specified, - otherwise the tag will not be populated. - type: string - name: - description: Name of the environment - variable used to populate the tag's - value - type: string - type: object - header: - description: |- - The custom tag's value is populated by an http header from - an incoming request. - properties: - defaultValue: - description: |- - Default value to be used for the tag when the named HTTP header does not exist. - The tag will be skipped if no default value is provided. - type: string - name: - description: HTTP header name used to - obtain the value from to populate - the tag value. - type: string - type: object - literal: - description: The custom tag's value is the - specified literal. - properties: - value: - description: Static literal value used - to populate the tag value. - type: string - type: object - type: object - x-kubernetes-validations: - - message: At most one of [literal environment - header] should be set - rule: (has(self.literal)?1:0) + (has(self.environment)?1:0) - + (has(self.header)?1:0) <= 1 - description: "and gateways).\nThe key represents - the name of the tag.\nEx:\n```yaml\ncustom_tags:\n\n\tnew_tag_name:\n\t - \ header:\n\t name: custom-http-header-name\n\t - \ default_value: defaulted-value-from-custom-header\n\n```" - type: object - datadog: - description: Use a Datadog tracer. - properties: - address: - description: Address of the Datadog Agent. - type: string - type: object - lightstep: - description: |- - Use a Lightstep tracer. - NOTE: For Istio 1.15+, this configuration option will result - in using OpenTelemetry-based Lightstep integration. - properties: - accessToken: - description: The Lightstep access token. - type: string - address: - description: Address of the Lightstep Satellite - pool. - type: string - type: object - maxPathTagLength: - description: |- - Configures the maximum length of the request path to extract and include in the - HttpUrl tag. Used to truncate length request paths to meet the needs of tracing - backend. If not set, then a length of 256 will be used. - format: int32 - type: integer - openCensusAgent: - description: Use an OpenCensus tracer exporting - to an OpenCensus agent. - properties: - address: - description: |- - gRPC address for the OpenCensus agent (e.g. dns://authority/host:port or - unix:path). See [gRPC naming - docs](https://github.com/grpc/grpc/blob/master/doc/naming.md) for - details. - type: string - context: - description: |- - Specifies the set of context propagation headers used for distributed - tracing. Default is `["W3C_TRACE_CONTEXT"]`. If multiple values are specified, - the proxy will attempt to read each header for each request and will - write all headers. - items: - description: |- - TraceContext selects the context propagation headers used for - distributed tracing. - enum: - - UNSPECIFIED - - W3C_TRACE_CONTEXT - - GRPC_BIN - - CLOUD_TRACE_CONTEXT - - B3 - type: string - type: array - type: object - sampling: - description: |- - The percentage of requests (0.0 - 100.0) that will be randomly selected for trace generation, - if not requested by the client or not forced. Default is 1.0. - type: number - stackdriver: - description: Use a Stackdriver tracer. - properties: - debug: - description: debug enables trace output to - stdout. - type: boolean - maxNumberOfAnnotations: - description: |- - The global default max number of annotation events per span. - default is 200. - format: int64 - type: integer - maxNumberOfAttributes: - description: |- - The global default max number of attributes per span. - default is 200. - format: int64 - type: integer - maxNumberOfMessageEvents: - description: |- - The global default max number of message events per span. - default is 200. - format: int64 - type: integer - type: object - tlsSettings: - description: |- - Use the tlsSettings to specify the tls mode to use. If the remote tracing service - uses Istio mutual TLS and shares the root CA with Pilot, specify the TLS - mode as `ISTIO_MUTUAL`. - properties: - caCertificates: - description: |- - OPTIONAL: The path to the file containing certificate authority - certificates to use in verifying a presented server certificate. If - omitted, the proxy will verify the server's certificate using - the OS CA certificates. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - caCrl: - description: |- - OPTIONAL: The path to the file containing the certificate revocation list (CRL) - to use in verifying a presented server certificate. `CRL` is a list of certificates - that have been revoked by the CA (Certificate Authority) before their scheduled expiration date. - If specified, the proxy will verify if the presented certificate is part of the revoked list of certificates. - If omitted, the proxy will not verify the certificate against the `crl`. Note that if `credentialName` is set, - `CRL` cannot be specified using `caCrl`, rather it has to be specified inside the credential. - type: string - clientCertificate: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client-side TLS certificate to use. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - credentialName: - description: |- - The name of the secret that holds the TLS certs for the - client including the CA certificates. This secret must exist in - the namespace of the proxy using the certificates. - An Opaque secret should contain the following keys and values: - `key: `, `cert: `, `cacert: `, - `crl: ` - Here CACertificate is used to verify the server certificate. - For mutual TLS, `cacert: ` can be provided in the - same secret or a separate secret named `-cacert`. - A TLS secret for client certificates with an additional - `ca.crt` key for CA certificates and `ca.crl` key for - certificate revocation list(CRL) is also supported. - Only one of client certificates and CA certificate - or credentialName can be specified. - - **NOTE:** This field is applicable at sidecars only if - `DestinationRule` has a `workloadSelector` specified. - Otherwise the field will be applicable only at gateways, and - sidecars will continue to use the certificate paths. - type: string - insecureSkipVerify: - description: |- - `insecureSkipVerify` specifies whether the proxy should skip verifying the - CA signature and SAN for the server certificate corresponding to the host. - The default value of this field is false. - type: boolean - mode: - description: |- - Indicates whether connections to this port should be secured - using TLS. The value of this field determines how TLS is enforced. - enum: - - DISABLE - - SIMPLE - - MUTUAL - - ISTIO_MUTUAL - type: string - privateKey: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client's private key. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - sni: - description: |- - SNI string to present to the server during TLS handshake. - If unspecified, SNI will be automatically set based on downstream HTTP - host/authority header for SIMPLE and MUTUAL TLS modes. - type: string - subjectAltNames: - description: |- - A list of alternate names to verify the subject identity in the - certificate. If specified, the proxy will verify that the server - certificate's subject alt name matches one of the specified values. - If specified, this list overrides the value of subject_alt_names - from the ServiceEntry. If unspecified, automatic validation of upstream - presented certificate for new upstream connections will be done based on the - downstream HTTP host/authority header. - items: - type: string - type: array - type: object - zipkin: - description: Use a Zipkin tracer. - properties: - address: - description: Address of the Zipkin service - (e.g. _zipkin:9411_). - type: string - type: object - type: object - x-kubernetes-validations: - - message: At most one of [zipkin lightstep datadog - stackdriver openCensusAgent] should be set - rule: (has(self.zipkin)?1:0) + (has(self.lightstep)?1:0) - + (has(self.datadog)?1:0) + (has(self.stackdriver)?1:0) - + (has(self.openCensusAgent)?1:0) <= 1 - tracingServiceName: - description: |- - Used by Envoy proxies to assign the values for the service names in trace - spans. - enum: - - APP_LABEL_AND_NAMESPACE - - CANONICAL_NAME_ONLY - - CANONICAL_NAME_AND_NAMESPACE - type: string - zipkinAddress: - description: |- - Address of the Zipkin service (e.g. _zipkin:9411_). - DEPRECATED: Use [tracing][istio.mesh.v1alpha1.ProxyConfig.tracing] instead. - - Deprecated: Marked as deprecated in mesh/v1alpha1/proxy.proto. - type: string - type: object - x-kubernetes-validations: - - message: At most one of [serviceCluster tracingServiceName] - should be set - rule: (has(self.serviceCluster)?1:0) + (has(self.tracingServiceName)?1:0) - <= 1 - defaultDestinationRuleExportTo: - description: |- - The default value for the `DestinationRule.exportTo` field. Has the same - syntax as `defaultServiceExportTo`. - - If not set the system will use "*" as the default value which implies that - destination rules are exported to all namespaces - items: - type: string - type: array - defaultHttpRetryPolicy: - description: "Configure the default HTTP retry policy.\nThe - default number of retry attempts is set at 2 for these - errors:\n\n\t\"connect-failure,refused-stream,unavailable,cancelled,retriable-status-codes\".\n\nSetting - the number of attempts to 0 disables retry policy globally.\nThis - setting can be overridden on a per-host basis using - the Virtual Service\nAPI.\nAll settings in the retry - policy except `perTryTimeout` can currently be\nconfigured - globally via this field." - properties: - attempts: - description: |- - Number of retries to be allowed for a given request. The interval - between retries will be determined automatically (25ms+). When request - `timeout` of the [HTTP route](https://istio.io/docs/reference/config/networking/virtual-service/#HTTPRoute) - or `per_try_timeout` is configured, the actual number of retries attempted also depends on - the specified request `timeout` and `per_try_timeout` values. MUST BE >= 0. If `0`, retries will be disabled. - The maximum possible number of requests made will be 1 + `attempts`. - format: int32 - type: integer - perTryTimeout: - description: |- - Timeout per attempt for a given request, including the initial call and any retries. Format: 1h/1m/1s/1ms. MUST BE >=1ms. - Default is same value as request - `timeout` of the [HTTP route](https://istio.io/docs/reference/config/networking/virtual-service/#HTTPRoute), - which means no timeout. - type: string - retryOn: - description: |- - Specifies the conditions under which retry takes place. - One or more policies can be specified using a ‘,’ delimited list. - See the [retry policies](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#x-envoy-retry-on) - and [gRPC retry policies](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#x-envoy-retry-grpc-on) for more details. - - In addition to the policies specified above, a list of HTTP status codes can be passed, such as `retryOn: "503,reset"`. - Note these status codes refer to the actual responses received from the destination. - For example, if a connection is reset, Istio will translate this to 503 for it's response. - However, the destination did not return a 503 error, so this would not match `"503"` (it would, however, match `"reset"`). - - If not specified, this defaults to `connect-failure,refused-stream,unavailable,cancelled,503`. - type: string - retryRemoteLocalities: - description: |- - Flag to specify whether the retries should retry to other localities. - See the [retry plugin configuration](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http_connection_management#retry-plugin-configuration) for more details. - type: boolean - type: object - defaultProviders: - description: Specifies extension providers to use by default - in Istio configuration resources. - properties: - accessLogging: - description: Name of the default provider(s) for access - logging. - items: - type: string - type: array - metrics: - description: Name of the default provider(s) for metrics. - items: - type: string - type: array - tracing: - description: Name of the default provider(s) for tracing. - items: - type: string - type: array - type: object - defaultServiceExportTo: - description: |- - The default value for the ServiceEntry.exportTo field and services - imported through container registry integrations, e.g. this applies to - Kubernetes Service resources. The value is a list of namespace names and - reserved namespace aliases. The allowed namespace aliases are: - ``` - * - All Namespaces - . - Current Namespace - ~ - No Namespace - ``` - If not set the system will use "*" as the default value which implies that - services are exported to all namespaces. - - `All namespaces` is a reasonable default for implementations that don't - need to restrict access or visibility of services across namespace - boundaries. If that requirement is present it is generally good practice to - make the default `Current namespace` so that services are only visible - within their own namespaces by default. Operators can then expand the - visibility of services to other namespaces as needed. Use of `No Namespace` - is expected to be rare but can have utility for deployments where - dependency management needs to be precise even within the scope of a single - namespace. - - For further discussion see the reference documentation for `ServiceEntry`, - `Sidecar`, and `Gateway`. - items: - type: string - type: array - defaultVirtualServiceExportTo: - description: |- - The default value for the VirtualService.exportTo field. Has the same - syntax as `defaultServiceExportTo`. - - If not set the system will use "*" as the default value which implies that - virtual services are exported to all namespaces - items: - type: string - type: array - disableEnvoyListenerLog: - description: |- - This flag disables Envoy Listener logs. - See [Listener Access Log](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/listener/v3/listener.proto#envoy-v3-api-field-config-listener-v3-listener-access-log) - Istio Enables Envoy's listener access logs on "NoRoute" response flag. - Default value is `false`. - type: boolean - discoverySelectors: - description: |- - A list of Kubernetes selectors that specify the set of namespaces that Istio considers when - computing configuration updates for sidecars. This can be used to reduce Istio's computational load - by limiting the number of entities (including services, pods, and endpoints) that are watched and processed. - If omitted, Istio will use the default behavior of processing all namespaces in the cluster. - Elements in the list are disjunctive (OR semantics), i.e. a namespace will be included if it matches any selector. - The following example selects any namespace that matches either below: - 1. The namespace has both of these labels: `env: prod` and `region: us-east1` - 2. The namespace has label `app` equal to `cassandra` or `spark`. - ```yaml - discoverySelectors: - - matchLabels: - env: prod - region: us-east1 - - matchExpressions: - - key: app - operator: In - values: - - cassandra - - spark - - ``` - Refer to the [Kubernetes selector docs](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors) - for additional detail on selector semantics. - items: - description: |- - A label selector is a label query over a set of resources. The result of matchLabels and - matchExpressions are ANDed. An empty label selector matches all objects. A null - label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label - selector requirements. The requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that the - selector applies to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - type: array - dnsRefreshRate: - description: |- - Configures DNS refresh rate for Envoy clusters of type `STRICT_DNS` - Default refresh rate is `60s`. - type: string - enableAutoMtls: - description: |- - This flag is used to enable mutual `TLS` automatically for service to service communication - within the mesh, default true. - If set to true, and a given service does not have a corresponding `DestinationRule` configured, - or its `DestinationRule` does not have ClientTLSSettings specified, Istio configures client side - TLS configuration appropriately. More specifically, - If the upstream authentication policy is in `STRICT` mode, use Istio provisioned certificate - for mutual `TLS` to connect to upstream. - If upstream service is in plain text mode, use plain text. - If the upstream authentication policy is in PERMISSIVE mode, Istio configures clients to use - mutual `TLS` when server sides are capable of accepting mutual `TLS` traffic. - If service `DestinationRule` exists and has `ClientTLSSettings` specified, that is always used instead. - type: boolean - enableEnvoyAccessLogService: - description: |- - This flag enables Envoy's gRPC Access Log Service. - See [Access Log Service](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/access_loggers/grpc/v3/als.proto) - for details about Envoy's gRPC Access Log Service API. - Default value is `false`. - type: boolean - enablePrometheusMerge: - description: |- - If enabled, Istio agent will merge metrics exposed by the application with metrics from Envoy - and Istio agent. The sidecar injection will replace `prometheus.io` annotations present on the pod - and redirect them towards Istio agent, which will then merge metrics of from the application with Istio metrics. - This relies on the annotations `prometheus.io/scrape`, `prometheus.io/port`, and - `prometheus.io/path` annotations. - If you are running a separately managed Envoy with an Istio sidecar, this may cause issues, as the metrics will collide. - In this case, it is recommended to disable aggregation on that deployment with the - `prometheus.istio.io/merge-metrics: "false"` annotation. - If not specified, this will be enabled by default. - type: boolean - enableTracing: - description: |- - Flag to control generation of trace spans and request IDs. - Requires a trace span collector defined in the proxy configuration. - type: boolean - extensionProviders: - description: |- - Defines a list of extension providers that extend Istio's functionality. For example, the AuthorizationPolicy - can be used with an extension provider to delegate the authorization decision to a custom authorization system. - items: - properties: - datadog: - description: Configures a Datadog tracing provider. - properties: - maxTagLength: - description: |- - Optional. Controls the overall path length allowed in a reported span. - NOTE: currently only controls max length of the path tag. - format: int32 - type: integer - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service for the Datadog agent. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "datadog.default.svc.cluster.local" or "bar/datadog.example.com". - type: string - required: - - port - - service - type: object - envoyExtAuthzGrpc: - description: Configures an external authorizer that - implements the Envoy ext_authz filter authorization - check service using the gRPC API. - properties: - failOpen: - description: |- - If true, the HTTP request or TCP connection will be allowed even if the communication with the authorization service has failed, - or if the authorization service has returned a HTTP 5xx error. - Default is false. For HTTP request, it will be rejected with 403 (HTTP Forbidden). For TCP connection, it will be closed immediately. - type: boolean - includeRequestBodyInCheck: - description: If set, the client request body - will be included in the authorization request - sent to the authorization service. - properties: - allowPartialMessage: - description: |- - When this field is true, ext-authz filter will buffer the message until maxRequestBytes is reached. - The authorization request will be dispatched and no 413 HTTP error will be returned by the filter. - A "x-envoy-auth-partial-body: false|true" metadata header will be added to the authorization request message - indicating if the body data is partial. - type: boolean - maxRequestBytes: - description: |- - Sets the maximum size of a message body that the ext-authz filter will hold in memory. - If maxRequestBytes is reached, and allowPartialMessage is false, Envoy will return a 413 (Payload Too Large). - Otherwise the request will be sent to the provider with a partial message. - Note that this setting will have precedence over the failOpen field, the 413 will be returned even when the - failOpen is set to true. - format: int32 - type: integer - packAsBytes: - description: |- - If true, the body sent to the external authorization service in the gRPC authorization request is set with raw bytes - in the [raw_body field](https://github.com/envoyproxy/envoy/blame/cffb095d59d7935abda12b9509bcd136808367bb/api/envoy/service/auth/v3/attribute_context.proto#L153). - Otherwise, it will be filled with UTF-8 string in the [body field](https://github.com/envoyproxy/envoy/blame/cffb095d59d7935abda12b9509bcd136808367bb/api/envoy/service/auth/v3/attribute_context.proto#L147). - This field only works with the envoyExtAuthzGrpc provider and has no effect for the envoyExtAuthzHttp provider. - type: boolean - type: object - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service that implements the Envoy ext_authz gRPC authorization service. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "my-ext-authz.foo.svc.cluster.local" or "bar/my-ext-authz.example.com". - type: string - statusOnError: - description: |- - Sets the HTTP status that is returned to the client when there is a network error to the authorization service. - The default status is "403" (HTTP Forbidden). - type: string - timeout: - description: |- - The maximum duration that the proxy will wait for a response from the provider, this is the timeout for a specific request (default timeout: 600s). - When this timeout condition is met, the proxy marks the communication to the authorization service as failure. - In this situation, the response sent back to the client will depend on the configured `failOpen` field. - type: string - required: - - port - - service - type: object - envoyExtAuthzHttp: - description: Configures an external authorizer that - implements the Envoy ext_authz filter authorization - check service using the HTTP API. - properties: - failOpen: - description: |- - If true, the user request will be allowed even if the communication with the authorization service has failed, - or if the authorization service has returned a HTTP 5xx error. - Default is false and the request will be rejected with "Forbidden" response. - type: boolean - headersToDownstreamOnAllow: - description: |- - List of headers from the authorization service that should be forwarded to downstream when the authorization - check result is allowed (HTTP code 200). - If not specified, the original response will not be modified and forwarded to downstream as-is. - Note, any existing headers will be overridden. - - Exact, prefix and suffix matches are supported (similar to the - [authorization policy rule syntax](https://istio.io/latest/docs/reference/config/security/authorization-policy/#Rule) - except the presence match): - - Exact match: "abc" will match on value "abc". - - Prefix match: "abc*" will match on value "abc" and "abcd". - - Suffix match: "*abc" will match on value "abc" and "xabc". - items: - type: string - type: array - headersToDownstreamOnDeny: - description: |- - List of headers from the authorization service that should be forwarded to downstream when the authorization - check result is not allowed (HTTP code other than 200). - If not specified, all the authorization response headers, except *Authority (Host)* will be in the response to - the downstream. - When a header is included in this list, *Path*, *Status*, *Content-Length*, *WWWAuthenticate* and *Location* are - automatically added. - Note, the body from the authorization service is always included in the response to downstream. - - Exact, prefix and suffix matches are supported (similar to the - [authorization policy rule syntax](https://istio.io/latest/docs/reference/config/security/authorization-policy/#Rule) - except the presence match): - - Exact match: "abc" will match on value "abc". - - Prefix match: "abc*" will match on value "abc" and "abcd". - - Suffix match: "*abc" will match on value "abc" and "xabc". - items: - type: string - type: array - headersToUpstreamOnAllow: - description: |- - List of headers from the authorization service that should be added or overridden in the original request and - forwarded to the upstream when the authorization check result is allowed (HTTP code 200). - If not specified, the original request will not be modified and forwarded to backend as-is. - Note, any existing headers will be overridden. - - Exact, prefix and suffix matches are supported (similar to the - [authorization policy rule syntax](https://istio.io/latest/docs/reference/config/security/authorization-policy/#Rule) - except the presence match): - - Exact match: "abc" will match on value "abc". - - Prefix match: "abc*" will match on value "abc" and "abcd". - - Suffix match: "*abc" will match on value "abc" and "xabc". - items: - type: string - type: array - includeAdditionalHeadersInCheck: - additionalProperties: - type: string - description: |- - Set of additional fixed headers that should be included in the authorization request sent to the authorization service. - Key is the header name and value is the header value. - Note that client request of the same key or headers specified in includeRequestHeadersInCheck will be overridden. - type: object - includeHeadersInCheck: - description: |- - DEPRECATED. Use includeRequestHeadersInCheck instead. - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - items: - type: string - type: array - includeRequestBodyInCheck: - description: If set, the client request body - will be included in the authorization request - sent to the authorization service. - properties: - allowPartialMessage: - description: |- - When this field is true, ext-authz filter will buffer the message until maxRequestBytes is reached. - The authorization request will be dispatched and no 413 HTTP error will be returned by the filter. - A "x-envoy-auth-partial-body: false|true" metadata header will be added to the authorization request message - indicating if the body data is partial. - type: boolean - maxRequestBytes: - description: |- - Sets the maximum size of a message body that the ext-authz filter will hold in memory. - If maxRequestBytes is reached, and allowPartialMessage is false, Envoy will return a 413 (Payload Too Large). - Otherwise the request will be sent to the provider with a partial message. - Note that this setting will have precedence over the failOpen field, the 413 will be returned even when the - failOpen is set to true. - format: int32 - type: integer - packAsBytes: - description: |- - If true, the body sent to the external authorization service in the gRPC authorization request is set with raw bytes - in the [raw_body field](https://github.com/envoyproxy/envoy/blame/cffb095d59d7935abda12b9509bcd136808367bb/api/envoy/service/auth/v3/attribute_context.proto#L153). - Otherwise, it will be filled with UTF-8 string in the [body field](https://github.com/envoyproxy/envoy/blame/cffb095d59d7935abda12b9509bcd136808367bb/api/envoy/service/auth/v3/attribute_context.proto#L147). - This field only works with the envoyExtAuthzGrpc provider and has no effect for the envoyExtAuthzHttp provider. - type: boolean - type: object - includeRequestHeadersInCheck: - description: |- - List of client request headers that should be included in the authorization request sent to the authorization service. - Note that in addition to the headers specified here following headers are included by default: - 1. *Host*, *Method*, *Path* and *Content-Length* are automatically sent. - 2. *Content-Length* will be set to 0 and the request will not have a message body. However, the authorization - request can include the buffered client request body (controlled by includeRequestBodyInCheck setting), - consequently the value of Content-Length of the authorization request reflects the size of its payload size. - - Exact, prefix and suffix matches are supported (similar to the - [authorization policy rule syntax](https://istio.io/latest/docs/reference/config/security/authorization-policy/#Rule) - except the presence match): - - Exact match: "abc" will match on value "abc". - - Prefix match: "abc*" will match on value "abc" and "abcd". - - Suffix match: "*abc" will match on value "abc" and "xabc". - items: - type: string - type: array - pathPrefix: - description: |- - Sets a prefix to the value of authorization request header *Path*. - For example, setting this to "/check" for an original user request at path "/admin" will cause the - authorization check request to be sent to the authorization service at the path "/check/admin" instead of "/admin". - type: string - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service that implements the Envoy ext_authz HTTP authorization service. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "my-ext-authz.foo.svc.cluster.local" or "bar/my-ext-authz.example.com". - type: string - statusOnError: - description: |- - Sets the HTTP status that is returned to the client when there is a network error to the authorization service. - The default status is "403" (HTTP Forbidden). - type: string - timeout: - description: |- - The maximum duration that the proxy will wait for a response from the provider (default timeout: 600s). - When this timeout condition is met, the proxy marks the communication to the authorization service as failure. - In this situation, the response sent back to the client will depend on the configured `failOpen` field. - type: string - required: - - port - - service - type: object - envoyFileAccessLog: - description: Configures an Envoy File Access Log - provider. - properties: - logFormat: - description: Optional. Allows overriding of - the default access log format. - properties: - labels: - additionalProperties: - type: string - description: "JSON structured format for - the envoy access logs. Envoy [command - operators](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators)\ncan - be used as values for fields within the - Struct. Values are rendered\nas strings, - numbers, or boolean values, as appropriate\n(see: - [format dictionaries](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#config-access-log-format-dictionaries)). - Nested JSON is\nsupported for some command - operators (e.g. `FILTER_STATE` or `DYNAMIC_METADATA`).\nUse - `labels: {}` for default envoy JSON log - format.\n\nExample:\n```\nlabels:\n\n\tstatus: - \"%RESPONSE_CODE%\"\n\tmessage: \"%LOCAL_REPLY_BODY%\"\n\n```" - type: object - text: - description: |- - Textual format for the envoy access logs. Envoy [command operators](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators) may be - used in the format. The [format string documentation](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#config-access-log-format-strings) - provides more information. - - NOTE: Istio will insert a newline ('\n') on all formats (if missing). - - Example: `text: "%LOCAL_REPLY_BODY%:%RESPONSE_CODE%:path=%REQ(:path)%"` - type: string - type: object - x-kubernetes-validations: - - message: At most one of [text labels] should - be set - rule: (has(self.text)?1:0) + (has(self.labels)?1:0) - <= 1 - path: - description: |- - Path to a local file to write the access log entries. - This may be used to write to streams, via `/dev/stderr` and `/dev/stdout` - If unspecified, defaults to `/dev/stdout`. - type: string - type: object - envoyHttpAls: - description: Configures an Envoy Access Logging - Service provider for HTTP traffic. - properties: - additionalRequestHeadersToLog: - description: Optional. Additional request headers - to log. - items: - type: string - type: array - additionalResponseHeadersToLog: - description: Optional. Additional response headers - to log. - items: - type: string - type: array - additionalResponseTrailersToLog: - description: Optional. Additional response trailers - to log. - items: - type: string - type: array - filterStateObjectsToLog: - description: Optional. Additional filter state - objects to log. - items: - type: string - type: array - logName: - description: |- - Optional. The friendly name of the access log. - Defaults: - - "http_envoy_accesslog" - - "listener_envoy_accesslog" - type: string - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service that implements the Envoy ALS gRPC authorization service. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "envoy-als.foo.svc.cluster.local" or "bar/envoy-als.example.com". - type: string - required: - - port - - service - type: object - envoyOtelAls: - description: Configures an Envoy Open Telemetry - Access Logging Service provider. - properties: - logFormat: - description: |- - Optional. Format for the proxy access log - Empty value results in proxy's default access log format, following Envoy access logging formatting. - properties: - labels: - additionalProperties: - type: string - description: "Optional. Additional attributes - that describe the specific event occurrence.\nStructured - format for the envoy access logs. Envoy - [command operators](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators)\ncan - be used as values for fields within the - Struct. Values are rendered\nas strings, - numbers, or boolean values, as appropriate\n(see: - [format dictionaries](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#config-access-log-format-dictionaries)). - Nested JSON is\nsupported for some command - operators (e.g. FILTER_STATE or DYNAMIC_METADATA).\nAlias - to `attributes` field in [Open Telemetry](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/access_loggers/open_telemetry/v3/logs_service.proto)\n\nExample:\n```\nlabels:\n\n\tstatus: - \"%RESPONSE_CODE%\"\n\tmessage: \"%LOCAL_REPLY_BODY%\"\n\n```" - type: object - text: - description: |- - Textual format for the envoy access logs. Envoy [command operators](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators) may be - used in the format. The [format string documentation](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#config-access-log-format-strings) - provides more information. - Alias to `body` field in [Open Telemetry](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/access_loggers/open_telemetry/v3/logs_service.proto) - Example: `text: "%LOCAL_REPLY_BODY%:%RESPONSE_CODE%:path=%REQ(:path)%"` - type: string - type: object - logName: - description: |- - Optional. The friendly name of the access log. - Defaults: - - "otel_envoy_accesslog" - type: string - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service that implements the Envoy ALS gRPC authorization service. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "envoy-als.foo.svc.cluster.local" or "bar/envoy-als.example.com". - type: string - required: - - port - - service - type: object - envoyTcpAls: - description: Configures an Envoy Access Logging - Service provider for TCP traffic. - properties: - filterStateObjectsToLog: - description: Optional. Additional filter state - objects to log. - items: - type: string - type: array - logName: - description: |- - Optional. The friendly name of the access log. - Defaults: - - "tcp_envoy_accesslog" - - "listener_envoy_accesslog" - type: string - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service that implements the Envoy ALS gRPC authorization service. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "envoy-als.foo.svc.cluster.local" or "bar/envoy-als.example.com". - type: string - required: - - port - - service - type: object - lightstep: - description: |- - Configures a Lightstep tracing provider. - Deprecated: For Istio 1.15+, please use an OpenTelemetryTracingProvider instead, more details can be found at https://github.com/istio/istio/issues/40027 - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - properties: - accessToken: - description: The Lightstep access token. - type: string - maxTagLength: - description: |- - Optional. Controls the overall path length allowed in a reported span. - NOTE: currently only controls max length of the path tag. - format: int32 - type: integer - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service for the Lightstep collector. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "lightstep.default.svc.cluster.local" or "bar/lightstep.example.com". - type: string - required: - - port - - service - type: object - name: - description: REQUIRED. A unique name identifying - the extension provider. - type: string - opencensus: - description: |- - Configures an OpenCensusAgent tracing provider. - Deprecated: OpenCensus is deprecated, more details can be found at https://opentelemetry.io/blog/2023/sunsetting-opencensus/ - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - properties: - context: - description: |- - Specifies the set of context propagation headers used for distributed - tracing. Default is `["W3C_TRACE_CONTEXT"]`. If multiple values are specified, - the proxy will attempt to read each header for each request and will - write all headers. - items: - description: |- - TraceContext selects the context propagation headers used for - distributed tracing. - enum: - - UNSPECIFIED - - W3C_TRACE_CONTEXT - - GRPC_BIN - - CLOUD_TRACE_CONTEXT - - B3 - type: string - type: array - maxTagLength: - description: |- - Optional. Controls the overall path length allowed in a reported span. - NOTE: currently only controls max length of the path tag. - format: int32 - type: integer - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service for the OpenCensusAgent. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "ocagent.default.svc.cluster.local" or "bar/ocagent.example.com". - type: string - required: - - port - - service - type: object - opentelemetry: - description: Configures an OpenTelemetry tracing - provider. - properties: - dynatraceSampler: - description: |- - The Dynatrace adaptive traffic management (ATM) sampler. - - Example configuration: - - ```yaml - - name: otel-tracing - opentelemetry: - port: 443 - service: "{your-environment-id}.live.dynatrace.com" - http: - path: "/api/v2/otlp/v1/traces" - timeout: 10s - headers: - - name: "Authorization" - value: "Api-Token dt0c01." - resourceDetectors: - dynatrace: {} - dynatraceSampler: - tenant: "{your-environment-id}" - clusterId: 1234 - properties: - clusterId: - description: |- - REQUIRED. The identifier of the cluster in the Dynatrace platform. - The cluster here is Dynatrace-specific concept and not related to the cluster concept in Istio/Envoy. - - The value can be obtained from the Istio deployment page in Dynatrace. - format: int32 - type: integer - httpService: - description: |- - Optional. Dynatrace HTTP API to obtain sampling configuration. - - When not provided, the Dynatrace Sampler will re-use the configuration from the OpenTelemetryTracingProvider HTTP Exporter - (`service`, `port` and `http`), including the access token. - properties: - http: - description: REQUIRED. Specifies sampling - configuration URI. - properties: - headers: - description: |- - Optional. Allows specifying custom HTTP headers that will be added - to each HTTP request sent. - items: - properties: - name: - description: REQUIRED. The - HTTP header name. - type: string - value: - description: REQUIRED. The - HTTP header value. - type: string - required: - - name - - value - type: object - type: array - path: - description: REQUIRED. Specifies - the path on the service. - type: string - timeout: - description: |- - Optional. Specifies the timeout for the HTTP request. - If not specified, the default is 3s. - type: string - required: - - path - type: object - port: - description: REQUIRED. Specifies the - port of the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the Dynatrace environment to obtain the sampling configuration. - The format is ``, where `` is the fully qualified Dynatrace environment - host name defined in the ServiceEntry. - - Example: "{your-environment-id}.live.dynatrace.com". - type: string - required: - - http - - port - - service - type: object - rootSpansPerMinute: - description: |- - Optional. Number of sampled spans per minute to be used - when the adaptive value cannot be obtained from the Dynatrace API. - - A default value of `1000` is used when: - - - `rootSpansPerMinute` is unset - - `rootSpansPerMinute` is set to 0 - format: int32 - type: integer - tenant: - description: |- - REQUIRED. The Dynatrace customer's tenant identifier. - - The value can be obtained from the Istio deployment page in Dynatrace. - type: string - required: - - clusterId - - tenant - type: object - grpc: - description: "Optional. Specifies the configuration - for exporting OTLP traces via GRPC.\nWhen - empty, traces will check whether HTTP is set.\nIf - not, traces will use default GRPC configurations.\n\nThe - following example shows how to configure the - OpenTelemetry ExtensionProvider to export - via GRPC:\n\n1. Add/change the OpenTelemetry - extension provider in `MeshConfig`\n```yaml\n - \ - name: opentelemetry\n opentelemetry:\n - \ port: 8090\n service: tracing.example.com\n - \ grpc:\n timeout: 10s\n initialMetadata:\n - \ - name: \"Authentication\"\n value: \"token-xxxxx\"\n\n```\n\n2. - Deploy a `ServiceEntry` for the observability - back-end\n```yaml\napiVersion: networking.istio.io/v1alpha3\nkind: - ServiceEntry\nmetadata:\n\n\tname: tracing-grpc\n\nspec:\n\n\thosts:\n\t- - tracing.example.com\n\tports:\n\t- number: - 8090\n\t name: grpc-port\n\t protocol: GRPC\n\tresolution: - DNS\n\tlocation: MESH_EXTERNAL\n\n```" - properties: - initialMetadata: - description: |- - Optional. Additional metadata to include in streams initiated to the GrpcService. This can be used for - scenarios in which additional ad hoc authorization headers (e.g. “x-foo-bar: baz-key“) are to - be injected. - items: - properties: - name: - description: REQUIRED. The HTTP header - name. - type: string - value: - description: REQUIRED. The HTTP header - value. - type: string - required: - - name - - value - type: object - type: array - timeout: - description: Optional. Specifies the timeout - for the GRPC request. - type: string - type: object - http: - description: "Optional. Specifies the configuration - for exporting OTLP traces via HTTP.\nWhen - empty, traces will be exported via gRPC.\n\nThe - following example shows how to configure the - OpenTelemetry ExtensionProvider to export - via HTTP:\n\n1. Add/change the OpenTelemetry - extension provider in `MeshConfig`\n```yaml\n - \ - name: otel-tracing\n opentelemetry:\n - \ port: 443\n service: my.olly-backend.com\n - \ http:\n path: \"/api/otlp/traces\"\n - \ timeout: 10s\n headers:\n - name: - \"my-custom-header\"\n value: \"some value\"\n\n```\n\n2. - Deploy a `ServiceEntry` for the observability - back-end\n```yaml\napiVersion: networking.istio.io/v1alpha3\nkind: - ServiceEntry\nmetadata:\n\n\tname: my-olly-backend\n\nspec:\n\n\thosts:\n\t- - my.olly-backend.com\n\tports:\n\t- number: - 443\n\t name: https-port\n\t protocol: HTTPS\n\tresolution: - DNS\n\tlocation: MESH_EXTERNAL\n\n---\napiVersion: - networking.istio.io/v1alpha3\nkind: DestinationRule\nmetadata:\n\n\tname: - my-olly-backend\n\nspec:\n\n\thost: my.olly-backend.com\n\ttrafficPolicy:\n\t - \ portLevelSettings:\n\t - port:\n\t number: - 443\n\t tls:\n\t mode: SIMPLE\n\n```" - properties: - headers: - description: |- - Optional. Allows specifying custom HTTP headers that will be added - to each HTTP request sent. - items: - properties: - name: - description: REQUIRED. The HTTP header - name. - type: string - value: - description: REQUIRED. The HTTP header - value. - type: string - required: - - name - - value - type: object - type: array - path: - description: REQUIRED. Specifies the path - on the service. - type: string - timeout: - description: |- - Optional. Specifies the timeout for the HTTP request. - If not specified, the default is 3s. - type: string - required: - - path - type: object - maxTagLength: - description: |- - Optional. Controls the overall path length allowed in a reported span. - NOTE: currently only controls max length of the path tag. - format: int32 - type: integer - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - resourceDetectors: - description: |- - Optional. Specifies [Resource Detectors](https://opentelemetry.io/docs/specs/otel/resource/sdk/) - to be used by the OpenTelemetry Tracer. When multiple resources are provided, they are merged - according to the OpenTelemetry [Resource specification](https://opentelemetry.io/docs/specs/otel/resource/sdk/#merge). - - The following example shows how to configure the Environment Resource Detector, that will - read the attributes from the environment variable `OTEL_RESOURCE_ATTRIBUTES`: - - ```yaml - - name: otel-tracing - opentelemetry: - port: 443 - service: my.olly-backend.com - resourceDetectors: - environment: {} - - ``` - properties: - dynatrace: - description: |- - Dynatrace Resource Detector. - The resource detector reads from the Dynatrace enrichment files - and adds host/process related attributes to the OpenTelemetry resource. - - See: [Enrich ingested data with Dynatrace-specific dimensions](https://docs.dynatrace.com/docs/shortlink/enrichment-files) - type: object - environment: - description: |- - OpenTelemetry Environment Resource Detector. - The resource detector reads attributes from the environment variable `OTEL_RESOURCE_ATTRIBUTES` - and adds them to the OpenTelemetry resource. - - See: [Resource specification](https://opentelemetry.io/docs/specs/otel/resource/sdk/#specifying-resource-information-via-an-environment-variable) - type: object - type: object - service: - description: |- - REQUIRED. Specifies the OpenTelemetry endpoint that will receive OTLP traces. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "otlp.default.svc.cluster.local" or "bar/otlp.example.com". - type: string - required: - - port - - service - type: object - x-kubernetes-validations: - - message: At most one of [dynatraceSampler] should - be set - rule: (has(self.dynatraceSampler)?1:0) <= 1 - prometheus: - description: Configures a Prometheus metrics provider. - type: object - skywalking: - description: Configures a Apache SkyWalking provider. - properties: - accessToken: - description: Optional. The SkyWalking OAP access - token. - type: string - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service for the SkyWalking receiver. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "skywalking.default.svc.cluster.local" or "bar/skywalking.example.com". - type: string - required: - - port - - service - type: object - stackdriver: - description: Configures a Stackdriver provider. - properties: - debug: - description: |- - debug enables trace output to stdout. - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - type: boolean - logging: - description: Optional. Controls Stackdriver - logging behavior. - properties: - labels: - additionalProperties: - type: string - description: "Collection of tag names and - tag expressions to include in the log\nentry. - Conflicts are resolved by the tag name - by overriding previously\nsupplied values.\n\nExample:\n\n\tlabels:\n\t - \ path: request.url_path\n\t foo: request.headers['x-foo']" - type: object - type: object - maxNumberOfAnnotations: - description: |- - The global default max number of annotation events per span. - default is 200. - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - format: int64 - type: integer - maxNumberOfAttributes: - description: |- - The global default max number of attributes per span. - default is 200. - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - format: int64 - type: integer - maxNumberOfMessageEvents: - description: |- - The global default max number of message events per span. - default is 200. - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - format: int64 - type: integer - maxTagLength: - description: |- - Optional. Controls the overall path length allowed in a reported span. - NOTE: currently only controls max length of the path tag. - format: int32 - type: integer - type: object - zipkin: - description: Configures a tracing provider that - uses the Zipkin API. - properties: - enable64bitTraceId: - description: |- - Optional. A 128 bit trace id will be used in Istio. - If true, will result in a 64 bit trace id being used. - type: boolean - maxTagLength: - description: |- - Optional. Controls the overall path length allowed in a reported span. - NOTE: currently only controls max length of the path tag. - format: int32 - type: integer - path: - description: |- - Optional. Specifies the endpoint of Zipkin API. - The default value is "/api/v2/spans". - type: string - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service that the Zipkin API. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "zipkin.default.svc.cluster.local" or "bar/zipkin.example.com". - type: string - required: - - port - - service - type: object - required: - - name - type: object - x-kubernetes-validations: - - message: At most one of [envoyExtAuthzHttp envoyExtAuthzGrpc - zipkin lightstep datadog stackdriver opencensus - skywalking opentelemetry prometheus envoyFileAccessLog - envoyHttpAls envoyTcpAls envoyOtelAls] should be - set - rule: (has(self.envoyExtAuthzHttp)?1:0) + (has(self.envoyExtAuthzGrpc)?1:0) - + (has(self.zipkin)?1:0) + (has(self.lightstep)?1:0) - + (has(self.datadog)?1:0) + (has(self.stackdriver)?1:0) - + (has(self.opencensus)?1:0) + (has(self.skywalking)?1:0) - + (has(self.opentelemetry)?1:0) + (has(self.prometheus)?1:0) - + (has(self.envoyFileAccessLog)?1:0) + (has(self.envoyHttpAls)?1:0) - + (has(self.envoyTcpAls)?1:0) + (has(self.envoyOtelAls)?1:0) - <= 1 - maxItems: 1000 - type: array - h2UpgradePolicy: - description: |- - Specify if http1.1 connections should be upgraded to http2 by default. - if sidecar is installed on all pods in the mesh, then this should be set to `UPGRADE`. - If one or more services or namespaces do not have sidecar(s), then this should be set to `DO_NOT_UPGRADE`. - It can be enabled by destination using the `destinationRule.trafficPolicy.connectionPool.http.h2UpgradePolicy` override. - enum: - - DO_NOT_UPGRADE - - UPGRADE - type: string - inboundClusterStatName: - description: |- - Name to be used while emitting statistics for inbound clusters. The same pattern is used while computing stat prefix for - network filters like TCP and Redis. - By default, Istio emits statistics with the pattern `inbound|||`. - For example `inbound|7443|grpc-reviews|reviews.prod.svc.cluster.local`. This can be used to override that pattern. - - A Pattern can be composed of various pre-defined variables. The following variables are supported. - - - `%SERVICE%` - Will be substituted with short hostname of the service. - - `%SERVICE_NAME%` - Will be substituted with name of the service. - - `%SERVICE_FQDN%` - Will be substituted with FQDN of the service. - - `%SERVICE_PORT%` - Will be substituted with port of the service. - - `%TARGET_PORT%` - Will be substituted with the target port of the service. - - `%SERVICE_PORT_NAME%` - Will be substituted with port name of the service. - - Following are some examples of supported patterns for reviews: - - - `%SERVICE_FQDN%_%SERVICE_PORT%` will use reviews.prod.svc.cluster.local_7443 as the stats name. - - `%SERVICE%` will use reviews.prod as the stats name. - type: string - inboundTrafficPolicy: - description: |- - Set the default behavior of the sidecar for handling inbound - traffic to the application. If your application listens on - localhost, you will need to set this to `LOCALHOST`. - properties: - mode: - enum: - - PASSTHROUGH - - LOCALHOST - type: string - type: object - ingressClass: - description: |- - Class of ingress resources to be processed by Istio ingress - controller. This corresponds to the value of - `kubernetes.io/ingress.class` annotation. - type: string - ingressControllerMode: - description: |- - Defines whether to use Istio ingress controller for annotated or all ingress resources. - Default mode is `STRICT`. - enum: - - UNSPECIFIED - - "OFF" - - DEFAULT - - STRICT - type: string - ingressSelector: - description: |- - Defines which gateway deployment to use as the Ingress controller. This field corresponds to - the Gateway.selector field, and will be set as `istio: INGRESS_SELECTOR`. - By default, `ingressgateway` is used, which will select the default IngressGateway as it has the - `istio: ingressgateway` labels. - It is recommended that this is the same value as ingressService. - type: string - ingressService: - description: |- - Name of the Kubernetes service used for the istio ingress controller. - If no ingress controller is specified, the default value `istio-ingressgateway` is used. - type: string - localityLbSetting: - description: |- - Locality based load balancing distribution or failover settings. - If unspecified, locality based load balancing will be enabled by default. - However, this requires outlierDetection to actually take effect for a particular - service, see https://istio.io/latest/docs/tasks/traffic-management/locality-load-balancing/failover/ - properties: - distribute: - description: |- - Optional: only one of distribute, failover or failoverPriority can be set. - Explicitly specify loadbalancing weight across different zones and geographical locations. - Refer to [Locality weighted load balancing](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/locality_weight) - If empty, the locality weight is set according to the endpoints number within it. - items: - description: |- - Describes how traffic originating in the 'from' zone or sub-zone is - distributed over a set of 'to' zones. Syntax for specifying a zone is - {region}/{zone}/{sub-zone} and terminal wildcards are allowed on any - segment of the specification. Examples: - - `*` - matches all localities - - `us-west/*` - all zones and sub-zones within the us-west region - - `us-west/zone-1/*` - all sub-zones within us-west/zone-1 - properties: - from: - description: Originating locality, '/' separated, - e.g. 'region/zone/sub_zone'. - type: string - to: - additionalProperties: - format: int32 - type: integer - description: |- - Map of upstream localities to traffic distribution weights. The sum of - all weights should be 100. Any locality not present will - receive no traffic. - type: object - type: object - type: array - enabled: - description: |- - enable locality load balancing, this is DestinationRule-level and will override mesh wide settings in entirety. - e.g. true means that turn on locality load balancing for this DestinationRule no matter what mesh wide settings is. - type: boolean - failover: - description: |- - Optional: only one of distribute, failover or failoverPriority can be set. - Explicitly specify the region traffic will land on when endpoints in local region becomes unhealthy. - Should be used together with OutlierDetection to detect unhealthy endpoints. - Note: if no OutlierDetection specified, this will not take effect. - items: - description: |- - Specify the traffic failover policy across regions. Since zone and sub-zone - failover is supported by default this only needs to be specified for - regions when the operator needs to constrain traffic failover so that - the default behavior of failing over to any endpoint globally does not - apply. This is useful when failing over traffic across regions would not - improve service health or may need to be restricted for other reasons - like regulatory controls. - properties: - from: - description: Originating region. - type: string - to: - description: |- - Destination region the traffic will fail over to when endpoints in - the 'from' region becomes unhealthy. - type: string - type: object - type: array - failoverPriority: - description: |- - failoverPriority is an ordered list of labels used to sort endpoints to do priority based load balancing. - This is to support traffic failover across different groups of endpoints. - Two kinds of labels can be specified: - - - Specify only label keys `[key1, key2, key3]`, istio would compare the label values of client with endpoints. - Suppose there are total N label keys `[key1, key2, key3, ...keyN]` specified: - - 1. Endpoints matching all N labels with the client proxy have priority P(0) i.e. the highest priority. - 2. Endpoints matching the first N-1 labels with the client proxy have priority P(1) i.e. second highest priority. - 3. By extension of this logic, endpoints matching only the first label with the client proxy has priority P(N-1) i.e. second lowest priority. - 4. All the other endpoints have priority P(N) i.e. lowest priority. - - - Specify labels with key and value `[key1=value1, key2=value2, key3=value3]`, istio would compare the labels with endpoints. - Suppose there are total N labels `[key1=value1, key2=value2, key3=value3, ...keyN=valueN]` specified: - - 1. Endpoints matching all N labels have priority P(0) i.e. the highest priority. - 2. Endpoints matching the first N-1 labels have priority P(1) i.e. second highest priority. - 3. By extension of this logic, endpoints matching only the first label has priority P(N-1) i.e. second lowest priority. - 4. All the other endpoints have priority P(N) i.e. lowest priority. - - Note: For a label to be considered for match, the previous labels must match, i.e. nth label would be considered matched only if first n-1 labels match. - - It can be any label specified on both client and server workloads. - The following labels which have special semantic meaning are also supported: - - - `topology.istio.io/network` is used to match the network metadata of an endpoint, which can be specified by pod/namespace label `topology.istio.io/network`, sidecar env `ISTIO_META_NETWORK` or MeshNetworks. - - `topology.istio.io/cluster` is used to match the clusterID of an endpoint, which can be specified by pod label `topology.istio.io/cluster` or pod env `ISTIO_META_CLUSTER_ID`. - - `topology.kubernetes.io/region` is used to match the region metadata of an endpoint, which maps to Kubernetes node label `topology.kubernetes.io/region` or the deprecated label `failure-domain.beta.kubernetes.io/region`. - - `topology.kubernetes.io/zone` is used to match the zone metadata of an endpoint, which maps to Kubernetes node label `topology.kubernetes.io/zone` or the deprecated label `failure-domain.beta.kubernetes.io/zone`. - - `topology.istio.io/subzone` is used to match the subzone metadata of an endpoint, which maps to Istio node label `topology.istio.io/subzone`. - - `kubernetes.io/hostname` is used to match the current node of an endpoint, which maps to Kubernetes node label `kubernetes.io/hostname`. - - The below topology config indicates the following priority levels: - - ```yaml - failoverPriority: - - "topology.istio.io/network" - - "topology.kubernetes.io/region" - - "topology.kubernetes.io/zone" - - "topology.istio.io/subzone" - ``` - - 1. endpoints match same [network, region, zone, subzone] label with the client proxy have the highest priority. - 2. endpoints have same [network, region, zone] label but different [subzone] label with the client proxy have the second highest priority. - 3. endpoints have same [network, region] label but different [zone] label with the client proxy have the third highest priority. - 4. endpoints have same [network] but different [region] labels with the client proxy have the fourth highest priority. - 5. all the other endpoints have the same lowest priority. - - Suppose a service associated endpoints reside in multi clusters, the below example represents: - 1. endpoints in `clusterA` and has `version=v1` label have P(0) priority. - 2. endpoints not in `clusterA` but has `version=v1` label have P(1) priority. - 2. all the other endpoints have P(2) priority. - - ```yaml - failoverPriority: - - "version=v1" - - "topology.istio.io/cluster=clusterA" - ``` - - Optional: only one of distribute, failover or failoverPriority can be set. - And it should be used together with `OutlierDetection` to detect unhealthy endpoints, otherwise has no effect. - items: - type: string - type: array - type: object - meshMTLS: - description: "The below configuration parameters can be - used to specify TLSConfig for mesh traffic.\nFor example, - a user could enable min TLS version for ISTIO_MUTUAL - traffic and specify a curve for non ISTIO_MUTUAL traffic - like below:\n```yaml\nmeshConfig:\n\n\tmeshMTLS:\n\t - \ minProtocolVersion: TLSV1_3\n\ttlsDefaults:\n\t Note: - applicable only for non ISTIO_MUTUAL scenarios\n\t ecdhCurves:\n\t - \ - P-256\n\t - P-512\n\n```\nConfiguration of - mTLS for traffic between workloads with ISTIO_MUTUAL - TLS traffic.\n\nNote: Mesh mTLS does not respect ECDH - curves." - properties: - cipherSuites: - description: |- - Optional: If specified, the TLS connection will only support the specified cipher list when negotiating TLS 1.0-1.2. - If not specified, the following cipher suites will be used: - ``` - ECDHE-ECDSA-AES256-GCM-SHA384 - ECDHE-RSA-AES256-GCM-SHA384 - ECDHE-ECDSA-AES128-GCM-SHA256 - ECDHE-RSA-AES128-GCM-SHA256 - AES256-GCM-SHA384 - AES128-GCM-SHA256 - ``` - items: - type: string - type: array - ecdhCurves: - description: |- - Optional: If specified, the TLS connection will only support the specified ECDH curves for the DH key exchange. - If not specified, the default curves enforced by Envoy will be used. For details about the default curves, refer to - [Ecdh Curves](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/transport_sockets/tls/v3/common.proto). - items: - type: string - type: array - minProtocolVersion: - description: |- - Optional: the minimum TLS protocol version. The default minimum - TLS version will be TLS 1.2. As servers may not be Envoy and be - set to TLS 1.2 (e.g., workloads using mTLS without sidecars), the - minimum TLS version for clients may also be TLS 1.2. - In the current Istio implementation, the maximum TLS protocol version - is TLS 1.3. - enum: - - TLS_AUTO - - TLSV1_2 - - TLSV1_3 - type: string - type: object - outboundClusterStatName: - description: |- - Name to be used while emitting statistics for outbound clusters. The same pattern is used while computing stat prefix for - network filters like TCP and Redis. - By default, Istio emits statistics with the pattern `outbound|||`. - For example `outbound|8080|v2|reviews.prod.svc.cluster.local`. This can be used to override that pattern. - - A Pattern can be composed of various pre-defined variables. The following variables are supported. - - - `%SERVICE%` - Will be substituted with short hostname of the service. - - `%SERVICE_NAME%` - Will be substituted with name of the service. - - `%SERVICE_FQDN%` - Will be substituted with FQDN of the service. - - `%SERVICE_PORT%` - Will be substituted with port of the service. - - `%SERVICE_PORT_NAME%` - Will be substituted with port name of the service. - - `%SUBSET_NAME%` - Will be substituted with subset. - - Following are some examples of supported patterns for reviews: - - - `%SERVICE_FQDN%_%SERVICE_PORT%` will use `reviews.prod.svc.cluster.local_7443` as the stats name. - - `%SERVICE%` will use reviews.prod as the stats name. - type: string - outboundTrafficPolicy: - description: |- - Set the default behavior of the sidecar for handling outbound - traffic from the application. - - Can be overridden at a Sidecar level by setting the `OutboundTrafficPolicy` in the - [Sidecar API](https://istio.io/docs/reference/config/networking/sidecar/#OutboundTrafficPolicy). - - Default mode is `ALLOW_ANY`, which means outbound traffic to unknown destinations will be allowed. - properties: - mode: - enum: - - REGISTRY_ONLY - - ALLOW_ANY - type: string - type: object - pathNormalization: - description: |- - ProxyPathNormalization configures how URL paths in incoming and outgoing HTTP requests are - normalized by the sidecars and gateways. - The normalized paths will be used in all aspects through the requests' lifetime on the - sidecars and gateways, which includes routing decisions in outbound direction (client proxy), - authorization policy match and enforcement in inbound direction (server proxy), and the URL - path proxied to the upstream service. - If not set, the NormalizationType.DEFAULT configuration will be used. - properties: - normalization: - enum: - - DEFAULT - - NONE - - BASE - - MERGE_SLASHES - - DECODE_AND_MERGE_SLASHES - type: string - type: object - protocolDetectionTimeout: - description: |- - Automatic protocol detection uses a set of heuristics to - determine whether the connection is using TLS or not (on the - server side), as well as the application protocol being used - (e.g., http vs tcp). These heuristics rely on the client sending - the first bits of data. For server first protocols like MySQL, - MongoDB, etc. Envoy will timeout on the protocol detection after - the specified period, defaulting to non mTLS plain TCP - traffic. Set this field to tweak the period that Envoy will wait - for the client to send the first bits of data. (MUST BE >=1ms or - 0s to disable). Default detection timeout is 0s (no timeout). - - Setting a timeout is not recommended nor safe. Even high timeouts (>5s) will be hit - occasionally, and when they occur the result is typically broken traffic that may not - recover on its own. Exceptionally high values might solve this, but injecting 60s delays - onto new connections is generally not tenable anyways. - type: string - proxyHttpPort: - description: Port on which Envoy should listen for HTTP - PROXY requests if set. - format: int32 - type: integer - proxyInboundListenPort: - description: |- - Port on which Envoy should listen for all inbound traffic to the pod/vm will be captured to. - Default port is 15006. - format: int32 - type: integer - proxyListenPort: - description: |- - Port on which Envoy should listen for all outbound traffic to other services. - Default port is 15001. - format: int32 - type: integer - rootNamespace: - description: |- - The namespace to treat as the administrative root namespace for - Istio configuration. When processing a leaf namespace Istio will search for - declarations in that namespace first and if none are found it will - search in the root namespace. Any matching declaration found in the root - namespace is processed as if it were declared in the leaf namespace. - - The precise semantics of this processing are documented on each resource - type. - type: string - serviceSettings: - description: Settings to be applied to select services. - items: - description: |- - Settings to be applied to select services. - - For example, the following configures all services in namespace "foo" as well as the - "bar" service in namespace "baz" to be considered cluster-local: - - ```yaml - serviceSettings: - - settings: - clusterLocal: true - hosts: - - "*.foo.svc.cluster.local" - - "bar.baz.svc.cluster.local" - - ``` - properties: - hosts: - description: |- - The services to which the Settings should be applied. Services are selected using the hostname - matching rules used by DestinationRule. - - For example: foo.bar.svc.cluster.local, *.baz.svc.cluster.local - items: - type: string - type: array - settings: - description: The settings to apply to the selected - services. - properties: - clusterLocal: - description: |- - If true, specifies that the client and service endpoints must reside in the same cluster. - By default, in multi-cluster deployments, the Istio control plane assumes all service - endpoints to be reachable from any client in any of the clusters which are part of the - mesh. This configuration option limits the set of service endpoints visible to a client - to be cluster scoped. - - There are some common scenarios when this can be useful: - - - A service (or group of services) is inherently local to the cluster and has local storage - for that cluster. For example, the kube-system namespace (e.g. the Kube API Server). - - A mesh administrator wants to slowly migrate services to Istio. They might start by first - having services cluster-local and then slowly transition them to mesh-wide. They could do - this service-by-service (e.g. mysvc.myns.svc.cluster.local) or as a group - (e.g. *.myns.svc.cluster.local). - - By default Istio will consider kubernetes.default.svc (i.e. the API Server) as well as all - services in the kube-system namespace to be cluster-local, unless explicitly overridden here. - type: boolean - type: object - type: object - type: array - tcpKeepalive: - description: If set then set `SO_KEEPALIVE` on the socket - to enable TCP Keepalives. - properties: - interval: - description: |- - The time duration between keep-alive probes. - Default is to use the OS level configuration - (unless overridden, Linux defaults to 75s.) - type: string - probes: - description: |- - Maximum number of keepalive probes to send without response before - deciding the connection is dead. Default is to use the OS level configuration - (unless overridden, Linux defaults to 9.) - format: int32 - type: integer - time: - description: |- - The time duration a connection needs to be idle before keep-alive - probes start being sent. Default is to use the OS level configuration - (unless overridden, Linux defaults to 7200s (ie 2 hours.) - type: string - type: object - tlsDefaults: - description: |- - Configuration of TLS for all traffic except for ISTIO_MUTUAL mode. - Currently, this supports configuration of ecdhCurves and cipherSuites only. - For ISTIO_MUTUAL TLS settings, use meshMTLS configuration. - properties: - cipherSuites: - description: |- - Optional: If specified, the TLS connection will only support the specified cipher list when negotiating TLS 1.0-1.2. - If not specified, the following cipher suites will be used: - ``` - ECDHE-ECDSA-AES256-GCM-SHA384 - ECDHE-RSA-AES256-GCM-SHA384 - ECDHE-ECDSA-AES128-GCM-SHA256 - ECDHE-RSA-AES128-GCM-SHA256 - AES256-GCM-SHA384 - AES128-GCM-SHA256 - ``` - items: - type: string - type: array - ecdhCurves: - description: |- - Optional: If specified, the TLS connection will only support the specified ECDH curves for the DH key exchange. - If not specified, the default curves enforced by Envoy will be used. For details about the default curves, refer to - [Ecdh Curves](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/transport_sockets/tls/v3/common.proto). - items: - type: string - type: array - minProtocolVersion: - description: |- - Optional: the minimum TLS protocol version. The default minimum - TLS version will be TLS 1.2. As servers may not be Envoy and be - set to TLS 1.2 (e.g., workloads using mTLS without sidecars), the - minimum TLS version for clients may also be TLS 1.2. - In the current Istio implementation, the maximum TLS protocol version - is TLS 1.3. - enum: - - TLS_AUTO - - TLSV1_2 - - TLSV1_3 - type: string - type: object - trustDomain: - description: |- - The trust domain corresponds to the trust root of a system. - Refer to [SPIFFE-ID](https://github.com/spiffe/spiffe/blob/master/standards/SPIFFE-ID.md#21-trust-domain) - type: string - trustDomainAliases: - description: |- - The trust domain aliases represent the aliases of `trustDomain`. - For example, if we have - ```yaml - trustDomain: td1 - trustDomainAliases: ["td2", "td3"] - ``` - Any service with the identity `td1/ns/foo/sa/a-service-account`, `td2/ns/foo/sa/a-service-account`, - or `td3/ns/foo/sa/a-service-account` will be treated the same in the Istio mesh. - items: - type: string - type: array - verifyCertificateAtClient: - description: |- - `VerifyCertificateAtClient` sets the mesh global default for peer certificate validation - at the client-side proxy when `SIMPLE` TLS or `MUTUAL` TLS (non `ISTIO_MUTUAL`) origination - modes are used. This setting can be overridden at the host level via DestinationRule API. - By default, `VerifyCertificateAtClient` is `true`. - - `CaCertificates`: If set, proxy verifies CA signature based on given CaCertificates. If unset, - and VerifyCertificateAtClient is true, proxy uses default System CA bundle. If unset and - `VerifyCertificateAtClient` is false, proxy will not verify the CA. - - `SubjectAltNames`: If set, proxy verifies subject alt names are present in the SAN. If unset, - and `VerifyCertificateAtClient` is true, proxy uses host in destination rule to verify the SANs. - If unset, and `VerifyCertificateAtClient` is false, proxy does not verify SANs. - - For SAN, client-side proxy will exact match host in `DestinationRule` as well as one level - wildcard if the specified host in DestinationRule doesn't contain a wildcard. - For example, if the host in `DestinationRule` is `x.y.com`, client-side proxy will - match either `x.y.com` or `*.y.com` for the SAN in the presented server certificate. - For wildcard host name in DestinationRule, client-side proxy will do a suffix match. For example, - if host is `*.x.y.com`, client-side proxy will verify the presented server certificate SAN matches - “.x.y.com` suffix. - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - type: boolean - type: object - multiCluster: - description: |- - Settings for multicluster. - The name of the cluster we are installing in. Note this is a user-defined name, which must be consistent - with Istiod configuration. - properties: - clusterName: - description: |- - The name of the cluster this installation will run in. This is required for sidecar injection - to properly label proxies - type: string - enabled: - description: |- - Enables the connection between two kubernetes clusters via their respective ingressgateway services. - Use if the pods in each cluster cannot directly talk to one another. - type: boolean - globalDomainSuffix: - description: The suffix for global service names. - type: string - includeEnvoyFilter: - description: Enable envoy filter to translate `globalDomainSuffix` - to cluster local suffix for cross cluster communication. - type: boolean - type: object - podAnnotations: - additionalProperties: - type: string - description: Annotations added to each pod. The default annotations - are required for scraping prometheus (in most environments). - type: object - podLabels: - additionalProperties: - type: string - description: Additional labels to apply on the pod level. - type: object - resources: - description: The k8s resource requests and limits for the - ztunnel Pods. - properties: - claims: - description: |- - Claims lists the names of resources, defined in spec.resourceClaims, - that are used by this container. - - This is an alpha field and requires enabling the - DynamicResourceAllocation feature gate. - - This field is immutable. It can only be set for containers. - items: - description: ResourceClaim references one entry in PodSpec.ResourceClaims. - properties: - name: - description: |- - Name must match the name of one entry in pod.spec.resourceClaims of - the Pod where this field is used. It makes that resource available - inside a container. - type: string - request: - description: |- - Request is the name chosen for a request in the referenced claim. - If empty, everything from the claim is made available, otherwise - only the result of this request. - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: |- - Limits describes the maximum amount of compute resources allowed. - More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: |- - Requests describes the minimum amount of compute resources required. - If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, - otherwise to an implementation-defined value. Requests cannot exceed Limits. - More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - type: object - type: object - revision: - description: Configures the revision this control plane is - a part of - type: string - tag: - description: The container image tag to pull. Image will be - `Hub/Image:Tag-Variant`. - type: string - variant: - description: The container image variant to pull. Options - are "debug" or "distroless". Unset will use the default - for the given version. - type: string - volumeMounts: - description: Additional volumeMounts to the ztunnel container - items: - description: VolumeMount describes a mounting of a Volume - within a container. - properties: - mountPath: - description: |- - Path within the container at which the volume should be mounted. Must - not contain ':'. - type: string - mountPropagation: - description: |- - mountPropagation determines how mounts are propagated from the host - to container and the other way around. - When not set, MountPropagationNone is used. - This field is beta in 1.10. - When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified - (which defaults to None). - type: string - name: - description: This must match the Name of a Volume. - type: string - readOnly: - description: |- - Mounted read-only if true, read-write otherwise (false or unspecified). - Defaults to false. - type: boolean - recursiveReadOnly: - description: |- - RecursiveReadOnly specifies whether read-only mounts should be handled - recursively. - - If ReadOnly is false, this field has no meaning and must be unspecified. - - If ReadOnly is true, and this field is set to Disabled, the mount is not made - recursively read-only. If this field is set to IfPossible, the mount is made - recursively read-only, if it is supported by the container runtime. If this - field is set to Enabled, the mount is made recursively read-only if it is - supported by the container runtime, otherwise the pod will not be started and - an error will be generated to indicate the reason. - - If this field is set to IfPossible or Enabled, MountPropagation must be set to - None (or be unspecified, which defaults to None). - - If this field is not specified, it is treated as an equivalent of Disabled. - type: string - subPath: - description: |- - Path within the volume from which the container's volume should be mounted. - Defaults to "" (volume's root). - type: string - subPathExpr: - description: |- - Expanded path within the volume from which the container's volume should be mounted. - Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. - Defaults to "" (volume's root). - SubPathExpr and SubPath are mutually exclusive. - type: string - required: - - mountPath - - name - type: object - type: array - volumes: - description: Additional volumes to add to the ztunnel Pod. - items: - description: Volume represents a named volume in a pod that - may be accessed by any container in the pod. - properties: - awsElasticBlockStore: - description: |- - awsElasticBlockStore represents an AWS Disk resource that is attached to a - kubelet's host machine and then exposed to the pod. - More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - properties: - fsType: - description: |- - fsType is the filesystem type of the volume that you want to mount. - Tip: Ensure that the filesystem type is supported by the host operating system. - Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - type: string - partition: - description: |- - partition is the partition in the volume that you want to mount. - If omitted, the default is to mount by volume name. - Examples: For volume /dev/sda1, you specify the partition as "1". - Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). - format: int32 - type: integer - readOnly: - description: |- - readOnly value true will force the readOnly setting in VolumeMounts. - More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - type: boolean - volumeID: - description: |- - volumeID is unique ID of the persistent disk resource in AWS (Amazon EBS volume). - More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - type: string - required: - - volumeID - type: object - azureDisk: - description: azureDisk represents an Azure Data Disk - mount on the host and bind mount to the pod. - properties: - cachingMode: - description: 'cachingMode is the Host Caching mode: - None, Read Only, Read Write.' - type: string - diskName: - description: diskName is the Name of the data disk - in the blob storage - type: string - diskURI: - description: diskURI is the URI of data disk in - the blob storage - type: string - fsType: - default: ext4 - description: |- - fsType is Filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - type: string - kind: - description: 'kind expected values are Shared: multiple - blob disks per storage account Dedicated: single - blob disk per storage account Managed: azure - managed data disk (only in managed availability - set). defaults to shared' - type: string - readOnly: - default: false - description: |- - readOnly Defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - description: azureFile represents an Azure File Service - mount on the host and bind mount to the pod. - properties: - readOnly: - description: |- - readOnly defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - type: boolean - secretName: - description: secretName is the name of secret that - contains Azure Storage Account Name and Key - type: string - shareName: - description: shareName is the azure share Name - type: string - required: - - secretName - - shareName - type: object - cephfs: - description: cephFS represents a Ceph FS mount on the - host that shares a pod's lifetime - properties: - monitors: - description: |- - monitors is Required: Monitors is a collection of Ceph monitors - More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it - items: - type: string - type: array - x-kubernetes-list-type: atomic - path: - description: 'path is Optional: Used as the mounted - root, rather than the full Ceph tree, default - is /' - type: string - readOnly: - description: |- - readOnly is Optional: Defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it - type: boolean - secretFile: - description: |- - secretFile is Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret - More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it - type: string - secretRef: - description: |- - secretRef is Optional: SecretRef is reference to the authentication secret for User, default is empty. - More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - user: - description: |- - user is optional: User is the rados user name, default is admin - More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it - type: string - required: - - monitors - type: object - cinder: - description: |- - cinder represents a cinder volume attached and mounted on kubelets host machine. - More info: https://examples.k8s.io/mysql-cinder-pd/README.md - properties: - fsType: - description: |- - fsType is the filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - More info: https://examples.k8s.io/mysql-cinder-pd/README.md - type: string - readOnly: - description: |- - readOnly defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - More info: https://examples.k8s.io/mysql-cinder-pd/README.md - type: boolean - secretRef: - description: |- - secretRef is optional: points to a secret object containing parameters used to connect - to OpenStack. - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - description: |- - volumeID used to identify the volume in cinder. - More info: https://examples.k8s.io/mysql-cinder-pd/README.md - type: string - required: - - volumeID - type: object - configMap: - description: configMap represents a configMap that should - populate this volume - properties: - defaultMode: - description: |- - defaultMode is optional: mode bits used to set permissions on created files by default. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - Defaults to 0644. - Directories within the path are not affected by this setting. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - items: - description: |- - items if unspecified, each key-value pair in the Data field of the referenced - ConfigMap will be projected into the volume as a file whose name is the - key and content is the value. If specified, the listed keys will be - projected into the specified paths, and unlisted keys will not be - present. If a key is specified which is not present in the ConfigMap, - the volume setup will error unless it is marked optional. Paths must be - relative and may not contain the '..' path or start with '..'. - items: - description: Maps a string key to a path within - a volume. - properties: - key: - description: key is the key to project. - type: string - mode: - description: |- - mode is Optional: mode bits used to set permissions on this file. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - If not specified, the volume defaultMode will be used. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - path: - description: |- - path is the relative path of the file to map the key to. - May not be an absolute path. - May not contain the path element '..'. - May not start with the string '..'. - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - optional: - description: optional specify whether the ConfigMap - or its keys must be defined - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - description: csi (Container Storage Interface) represents - ephemeral storage that is handled by certain external - CSI drivers (Beta feature). - properties: - driver: - description: |- - driver is the name of the CSI driver that handles this volume. - Consult with your admin for the correct name as registered in the cluster. - type: string - fsType: - description: |- - fsType to mount. Ex. "ext4", "xfs", "ntfs". - If not provided, the empty value is passed to the associated CSI driver - which will determine the default filesystem to apply. - type: string - nodePublishSecretRef: - description: |- - nodePublishSecretRef is a reference to the secret object containing - sensitive information to pass to the CSI driver to complete the CSI - NodePublishVolume and NodeUnpublishVolume calls. - This field is optional, and may be empty if no secret is required. If the - secret object contains more than one secret, all secret references are passed. - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - description: |- - readOnly specifies a read-only configuration for the volume. - Defaults to false (read/write). - type: boolean - volumeAttributes: - additionalProperties: - type: string - description: |- - volumeAttributes stores driver-specific properties that are passed to the CSI - driver. Consult your driver's documentation for supported values. - type: object - required: - - driver - type: object - downwardAPI: - description: downwardAPI represents downward API about - the pod that should populate this volume - properties: - defaultMode: - description: |- - Optional: mode bits to use on created files by default. Must be a - Optional: mode bits used to set permissions on created files by default. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - Defaults to 0644. - Directories within the path are not affected by this setting. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - items: - description: Items is a list of downward API volume - file - items: - description: DownwardAPIVolumeFile represents - information to create the file containing the - pod field - properties: - fieldRef: - description: 'Required: Selects a field of - the pod: only annotations, labels, name, - namespace and uid are supported.' - properties: - apiVersion: - description: Version of the schema the - FieldPath is written in terms of, defaults - to "v1". - type: string - fieldPath: - description: Path of the field to select - in the specified API version. - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - description: |- - Optional: mode bits used to set permissions on this file, must be an octal value - between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - If not specified, the volume defaultMode will be used. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - path: - description: 'Required: Path is the relative - path name of the file to be created. Must - not be absolute or contain the ''..'' path. - Must be utf-8 encoded. The first item of - the relative path must not start with ''..''' - type: string - resourceFieldRef: - description: |- - Selects a resource of the container: only resources limits and requests - (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. - properties: - containerName: - description: 'Container name: required - for volumes, optional for env vars' - type: string - divisor: - anyOf: - - type: integer - - type: string - description: Specifies the output format - of the exposed resources, defaults to - "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource to select' - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - x-kubernetes-list-type: atomic - type: object - emptyDir: - description: |- - emptyDir represents a temporary directory that shares a pod's lifetime. - More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir - properties: - medium: - description: |- - medium represents what type of storage medium should back this directory. - The default is "" which means to use the node's default medium. - Must be an empty string (default) or Memory. - More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - description: |- - sizeLimit is the total amount of local storage required for this EmptyDir volume. - The size limit is also applicable for memory medium. - The maximum usage on memory medium EmptyDir would be the minimum value between - the SizeLimit specified here and the sum of memory limits of all containers in a pod. - The default is nil which means that the limit is undefined. - More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - ephemeral: - description: |- - ephemeral represents a volume that is handled by a cluster storage driver. - The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts, - and deleted when the pod is removed. - - Use this if: - a) the volume is only needed while the pod runs, - b) features of normal volumes like restoring from snapshot or capacity - tracking are needed, - c) the storage driver is specified through a storage class, and - d) the storage driver supports dynamic volume provisioning through - a PersistentVolumeClaim (see EphemeralVolumeSource for more - information on the connection between this volume type - and PersistentVolumeClaim). - - Use PersistentVolumeClaim or one of the vendor-specific - APIs for volumes that persist for longer than the lifecycle - of an individual pod. - - Use CSI for light-weight local ephemeral volumes if the CSI driver is meant to - be used that way - see the documentation of the driver for - more information. - - A pod can use both types of ephemeral volumes and - persistent volumes at the same time. - properties: - volumeClaimTemplate: - description: |- - Will be used to create a stand-alone PVC to provision the volume. - The pod in which this EphemeralVolumeSource is embedded will be the - owner of the PVC, i.e. the PVC will be deleted together with the - pod. The name of the PVC will be `-` where - `` is the name from the `PodSpec.Volumes` array - entry. Pod validation will reject the pod if the concatenated name - is not valid for a PVC (for example, too long). - - An existing PVC with that name that is not owned by the pod - will *not* be used for the pod to avoid using an unrelated - volume by mistake. Starting the pod is then blocked until - the unrelated PVC is removed. If such a pre-created PVC is - meant to be used by the pod, the PVC has to updated with an - owner reference to the pod once the pod exists. Normally - this should not be necessary, but it may be useful when - manually reconstructing a broken cluster. - - This field is read-only and no changes will be made by Kubernetes - to the PVC after it has been created. - - Required, must not be nil. - properties: - metadata: - description: |- - May contain labels and annotations that will be copied into the PVC - when creating it. No other fields are allowed and will be rejected during - validation. - type: object - spec: - description: |- - The specification for the PersistentVolumeClaim. The entire content is - copied unchanged into the PVC that gets created from this - template. The same fields as in a PersistentVolumeClaim - are also valid here. - properties: - accessModes: - description: |- - accessModes contains the desired access modes the volume should have. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1 - items: - type: string - type: array - x-kubernetes-list-type: atomic - dataSource: - description: |- - dataSource field can be used to specify either: - * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) - * An existing PVC (PersistentVolumeClaim) - If the provisioner or an external controller can support the specified data source, - it will create a new volume based on the contents of the specified data source. - When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, - and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. - If the namespace is specified, then dataSourceRef will not be copied to dataSource. - properties: - apiGroup: - description: |- - APIGroup is the group for the resource being referenced. - If APIGroup is not specified, the specified Kind must be in the core API group. - For any other third-party types, APIGroup is required. - type: string - kind: - description: Kind is the type of resource - being referenced - type: string - name: - description: Name is the name of resource - being referenced - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - description: |- - dataSourceRef specifies the object from which to populate the volume with data, if a non-empty - volume is desired. This may be any object from a non-empty API group (non - core object) or a PersistentVolumeClaim object. - When this field is specified, volume binding will only succeed if the type of - the specified object matches some installed volume populator or dynamic - provisioner. - This field will replace the functionality of the dataSource field and as such - if both fields are non-empty, they must have the same value. For backwards - compatibility, when namespace isn't specified in dataSourceRef, - both fields (dataSource and dataSourceRef) will be set to the same - value automatically if one of them is empty and the other is non-empty. - When namespace is specified in dataSourceRef, - dataSource isn't set to the same value and must be empty. - There are three important differences between dataSource and dataSourceRef: - * While dataSource only allows two specific types of objects, dataSourceRef - allows any non-core object, as well as PersistentVolumeClaim objects. - * While dataSource ignores disallowed values (dropping them), dataSourceRef - preserves all values, and generates an error if a disallowed value is - specified. - * While dataSource only allows local objects, dataSourceRef allows objects - in any namespaces. - (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. - (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. - properties: - apiGroup: - description: |- - APIGroup is the group for the resource being referenced. - If APIGroup is not specified, the specified Kind must be in the core API group. - For any other third-party types, APIGroup is required. - type: string - kind: - description: Kind is the type of resource - being referenced - type: string - name: - description: Name is the name of resource - being referenced - type: string - namespace: - description: |- - Namespace is the namespace of resource being referenced - Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. - (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled. - type: string - required: - - kind - - name - type: object - resources: - description: |- - resources represents the minimum resources the volume should have. - If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements - that are lower than previous value but must still be higher than capacity recorded in the - status field of the claim. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: |- - Limits describes the maximum amount of compute resources allowed. - More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: |- - Requests describes the minimum amount of compute resources required. - If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, - otherwise to an implementation-defined value. Requests cannot exceed Limits. - More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - type: object - type: object - selector: - description: selector is a label query over - volumes to consider for binding. - properties: - matchExpressions: - description: matchExpressions is a list - of label selector requirements. The - requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label - key that the selector applies - to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - description: |- - storageClassName is the name of the StorageClass required by the claim. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1 - type: string - volumeAttributesClassName: - description: |- - volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. - If specified, the CSI driver will create or update the volume with the attributes defined - in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, - it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass - will be applied to the claim but it's not allowed to reset this field to empty string once it is set. - If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass - will be set by the persistentvolume controller if it exists. - If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be - set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource - exists. - More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ - (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). - type: string - volumeMode: - description: |- - volumeMode defines what type of volume is required by the claim. - Value of Filesystem is implied when not included in claim spec. - type: string - volumeName: - description: volumeName is the binding reference - to the PersistentVolume backing this claim. - type: string - type: object - required: - - spec - type: object - type: object - fc: - description: fc represents a Fibre Channel resource - that is attached to a kubelet's host machine and then - exposed to the pod. - properties: - fsType: - description: |- - fsType is the filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - type: string - lun: - description: 'lun is Optional: FC target lun number' - format: int32 - type: integer - readOnly: - description: |- - readOnly is Optional: Defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - type: boolean - targetWWNs: - description: 'targetWWNs is Optional: FC target - worldwide names (WWNs)' - items: - type: string - type: array - x-kubernetes-list-type: atomic - wwids: - description: |- - wwids Optional: FC volume world wide identifiers (wwids) - Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously. - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - flexVolume: - description: |- - flexVolume represents a generic volume resource that is - provisioned/attached using an exec based plugin. - properties: - driver: - description: driver is the name of the driver to - use for this volume. - type: string - fsType: - description: |- - fsType is the filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script. - type: string - options: - additionalProperties: - type: string - description: 'options is Optional: this field holds - extra command options if any.' - type: object - readOnly: - description: |- - readOnly is Optional: defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - type: boolean - secretRef: - description: |- - secretRef is Optional: secretRef is reference to the secret object containing - sensitive information to pass to the plugin scripts. This may be - empty if no secret object is specified. If the secret object - contains more than one secret, all secrets are passed to the plugin - scripts. - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - description: flocker represents a Flocker volume attached - to a kubelet's host machine. This depends on the Flocker - control service being running - properties: - datasetName: - description: |- - datasetName is Name of the dataset stored as metadata -> name on the dataset for Flocker - should be considered as deprecated - type: string - datasetUUID: - description: datasetUUID is the UUID of the dataset. - This is unique identifier of a Flocker dataset - type: string - type: object - gcePersistentDisk: - description: |- - gcePersistentDisk represents a GCE Disk resource that is attached to a - kubelet's host machine and then exposed to the pod. - More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - properties: - fsType: - description: |- - fsType is filesystem type of the volume that you want to mount. - Tip: Ensure that the filesystem type is supported by the host operating system. - Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - type: string - partition: - description: |- - partition is the partition in the volume that you want to mount. - If omitted, the default is to mount by volume name. - Examples: For volume /dev/sda1, you specify the partition as "1". - Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). - More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - format: int32 - type: integer - pdName: - description: |- - pdName is unique name of the PD resource in GCE. Used to identify the disk in GCE. - More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - type: string - readOnly: - description: |- - readOnly here will force the ReadOnly setting in VolumeMounts. - Defaults to false. - More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - type: boolean - required: - - pdName - type: object - gitRepo: - description: |- - gitRepo represents a git repository at a particular revision. - DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an - EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir - into the Pod's container. - properties: - directory: - description: |- - directory is the target directory name. - Must not contain or start with '..'. If '.' is supplied, the volume directory will be the - git repository. Otherwise, if specified, the volume will contain the git repository in - the subdirectory with the given name. - type: string - repository: - description: repository is the URL - type: string - revision: - description: revision is the commit hash for the - specified revision. - type: string - required: - - repository - type: object - glusterfs: - description: |- - glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. - More info: https://examples.k8s.io/volumes/glusterfs/README.md - properties: - endpoints: - description: |- - endpoints is the endpoint name that details Glusterfs topology. - More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod - type: string - path: - description: |- - path is the Glusterfs volume path. - More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod - type: string - readOnly: - description: |- - readOnly here will force the Glusterfs volume to be mounted with read-only permissions. - Defaults to false. - More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod - type: boolean - required: - - endpoints - - path - type: object - hostPath: - description: |- - hostPath represents a pre-existing file or directory on the host - machine that is directly exposed to the container. This is generally - used for system agents or other privileged things that are allowed - to see the host machine. Most containers will NOT need this. - More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - properties: - path: - description: |- - path of the directory on the host. - If the path is a symlink, it will follow the link to the real path. - More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - type: string - type: - description: |- - type for HostPath Volume - Defaults to "" - More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - type: string - required: - - path - type: object - image: - description: |- - image represents an OCI object (a container image or artifact) pulled and mounted on the kubelet's host machine. - The volume is resolved at pod startup depending on which PullPolicy value is provided: - - - Always: the kubelet always attempts to pull the reference. Container creation will fail If the pull fails. - - Never: the kubelet never pulls the reference and only uses a local image or artifact. Container creation will fail if the reference isn't present. - - IfNotPresent: the kubelet pulls if the reference isn't already present on disk. Container creation will fail if the reference isn't present and the pull fails. - - The volume gets re-resolved if the pod gets deleted and recreated, which means that new remote content will become available on pod recreation. - A failure to resolve or pull the image during pod startup will block containers from starting and may add significant latency. Failures will be retried using normal volume backoff and will be reported on the pod reason and message. - The types of objects that may be mounted by this volume are defined by the container runtime implementation on a host machine and at minimum must include all valid types supported by the container image field. - The OCI object gets mounted in a single directory (spec.containers[*].volumeMounts.mountPath) by merging the manifest layers in the same way as for container images. - The volume will be mounted read-only (ro) and non-executable files (noexec). - Sub path mounts for containers are not supported (spec.containers[*].volumeMounts.subpath). - The field spec.securityContext.fsGroupChangePolicy has no effect on this volume type. - properties: - pullPolicy: - description: |- - Policy for pulling OCI objects. Possible values are: - Always: the kubelet always attempts to pull the reference. Container creation will fail If the pull fails. - Never: the kubelet never pulls the reference and only uses a local image or artifact. Container creation will fail if the reference isn't present. - IfNotPresent: the kubelet pulls if the reference isn't already present on disk. Container creation will fail if the reference isn't present and the pull fails. - Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. - type: string - reference: - description: |- - Required: Image or artifact reference to be used. - Behaves in the same way as pod.spec.containers[*].image. - Pull secrets will be assembled in the same way as for the container image by looking up node credentials, SA image pull secrets, and pod spec image pull secrets. - More info: https://kubernetes.io/docs/concepts/containers/images - This field is optional to allow higher level config management to default or override - container images in workload controllers like Deployments and StatefulSets. - type: string - type: object - iscsi: - description: |- - iscsi represents an ISCSI Disk resource that is attached to a - kubelet's host machine and then exposed to the pod. - More info: https://examples.k8s.io/volumes/iscsi/README.md - properties: - chapAuthDiscovery: - description: chapAuthDiscovery defines whether support - iSCSI Discovery CHAP authentication - type: boolean - chapAuthSession: - description: chapAuthSession defines whether support - iSCSI Session CHAP authentication - type: boolean - fsType: - description: |- - fsType is the filesystem type of the volume that you want to mount. - Tip: Ensure that the filesystem type is supported by the host operating system. - Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi - type: string - initiatorName: - description: |- - initiatorName is the custom iSCSI Initiator Name. - If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface - : will be created for the connection. - type: string - iqn: - description: iqn is the target iSCSI Qualified Name. - type: string - iscsiInterface: - default: default - description: |- - iscsiInterface is the interface Name that uses an iSCSI transport. - Defaults to 'default' (tcp). - type: string - lun: - description: lun represents iSCSI Target Lun number. - format: int32 - type: integer - portals: - description: |- - portals is the iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port - is other than default (typically TCP ports 860 and 3260). - items: - type: string - type: array - x-kubernetes-list-type: atomic - readOnly: - description: |- - readOnly here will force the ReadOnly setting in VolumeMounts. - Defaults to false. - type: boolean - secretRef: - description: secretRef is the CHAP Secret for iSCSI - target and initiator authentication - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - description: |- - targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port - is other than default (typically TCP ports 860 and 3260). - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - description: |- - name of the volume. - Must be a DNS_LABEL and unique within the pod. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - nfs: - description: |- - nfs represents an NFS mount on the host that shares a pod's lifetime - More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - properties: - path: - description: |- - path that is exported by the NFS server. - More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - type: string - readOnly: - description: |- - readOnly here will force the NFS export to be mounted with read-only permissions. - Defaults to false. - More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - type: boolean - server: - description: |- - server is the hostname or IP address of the NFS server. - More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - description: |- - persistentVolumeClaimVolumeSource represents a reference to a - PersistentVolumeClaim in the same namespace. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims - properties: - claimName: - description: |- - claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims - type: string - readOnly: - description: |- - readOnly Will force the ReadOnly setting in VolumeMounts. - Default false. - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - description: photonPersistentDisk represents a PhotonController - persistent disk attached and mounted on kubelets host - machine - properties: - fsType: - description: |- - fsType is the filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - type: string - pdID: - description: pdID is the ID that identifies Photon - Controller persistent disk - type: string - required: - - pdID - type: object - portworxVolume: - description: portworxVolume represents a portworx volume - attached and mounted on kubelets host machine - properties: - fsType: - description: |- - fSType represents the filesystem type to mount - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified. - type: string - readOnly: - description: |- - readOnly defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - type: boolean - volumeID: - description: volumeID uniquely identifies a Portworx - volume - type: string - required: - - volumeID - type: object - projected: - description: projected items for all in one resources - secrets, configmaps, and downward API - properties: - defaultMode: - description: |- - defaultMode are the mode bits used to set permissions on created files by default. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - Directories within the path are not affected by this setting. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - sources: - description: |- - sources is the list of volume projections. Each entry in this list - handles one source. - items: - description: |- - Projection that may be projected along with other supported volume types. - Exactly one of these fields must be set. - properties: - clusterTrustBundle: - description: |- - ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field - of ClusterTrustBundle objects in an auto-updating file. - - Alpha, gated by the ClusterTrustBundleProjection feature gate. - - ClusterTrustBundle objects can either be selected by name, or by the - combination of signer name and a label selector. - - Kubelet performs aggressive normalization of the PEM contents written - into the pod filesystem. Esoteric PEM features such as inter-block - comments and block headers are stripped. Certificates are deduplicated. - The ordering of certificates within the file is arbitrary, and Kubelet - may change the order over time. - properties: - labelSelector: - description: |- - Select all ClusterTrustBundles that match this label selector. Only has - effect if signerName is set. Mutually-exclusive with name. If unset, - interpreted as "match nothing". If set but empty, interpreted as "match - everything". - properties: - matchExpressions: - description: matchExpressions is a - list of label selector requirements. - The requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label - key that the selector applies - to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - name: - description: |- - Select a single ClusterTrustBundle by object name. Mutually-exclusive - with signerName and labelSelector. - type: string - optional: - description: |- - If true, don't block pod startup if the referenced ClusterTrustBundle(s) - aren't available. If using name, then the named ClusterTrustBundle is - allowed not to exist. If using signerName, then the combination of - signerName and labelSelector is allowed to match zero - ClusterTrustBundles. - type: boolean - path: - description: Relative path from the volume - root to write the bundle. - type: string - signerName: - description: |- - Select all ClusterTrustBundles that match this signer name. - Mutually-exclusive with name. The contents of all selected - ClusterTrustBundles will be unified and deduplicated. - type: string - required: - - path - type: object - configMap: - description: configMap information about the - configMap data to project - properties: - items: - description: |- - items if unspecified, each key-value pair in the Data field of the referenced - ConfigMap will be projected into the volume as a file whose name is the - key and content is the value. If specified, the listed keys will be - projected into the specified paths, and unlisted keys will not be - present. If a key is specified which is not present in the ConfigMap, - the volume setup will error unless it is marked optional. Paths must be - relative and may not contain the '..' path or start with '..'. - items: - description: Maps a string key to a - path within a volume. - properties: - key: - description: key is the key to project. - type: string - mode: - description: |- - mode is Optional: mode bits used to set permissions on this file. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - If not specified, the volume defaultMode will be used. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - path: - description: |- - path is the relative path of the file to map the key to. - May not be an absolute path. - May not contain the path element '..'. - May not start with the string '..'. - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - optional: - description: optional specify whether - the ConfigMap or its keys must be defined - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - description: downwardAPI information about - the downwardAPI data to project - properties: - items: - description: Items is a list of DownwardAPIVolume - file - items: - description: DownwardAPIVolumeFile represents - information to create the file containing - the pod field - properties: - fieldRef: - description: 'Required: Selects - a field of the pod: only annotations, - labels, name, namespace and uid - are supported.' - properties: - apiVersion: - description: Version of the - schema the FieldPath is written - in terms of, defaults to "v1". - type: string - fieldPath: - description: Path of the field - to select in the specified - API version. - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - description: |- - Optional: mode bits used to set permissions on this file, must be an octal value - between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - If not specified, the volume defaultMode will be used. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - path: - description: 'Required: Path is the - relative path name of the file - to be created. Must not be absolute - or contain the ''..'' path. Must - be utf-8 encoded. The first item - of the relative path must not - start with ''..''' - type: string - resourceFieldRef: - description: |- - Selects a resource of the container: only resources limits and requests - (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. - properties: - containerName: - description: 'Container name: - required for volumes, optional - for env vars' - type: string - divisor: - anyOf: - - type: integer - - type: string - description: Specifies the output - format of the exposed resources, - defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource - to select' - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - x-kubernetes-list-type: atomic - type: object - secret: - description: secret information about the - secret data to project - properties: - items: - description: |- - items if unspecified, each key-value pair in the Data field of the referenced - Secret will be projected into the volume as a file whose name is the - key and content is the value. If specified, the listed keys will be - projected into the specified paths, and unlisted keys will not be - present. If a key is specified which is not present in the Secret, - the volume setup will error unless it is marked optional. Paths must be - relative and may not contain the '..' path or start with '..'. - items: - description: Maps a string key to a - path within a volume. - properties: - key: - description: key is the key to project. - type: string - mode: - description: |- - mode is Optional: mode bits used to set permissions on this file. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - If not specified, the volume defaultMode will be used. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - path: - description: |- - path is the relative path of the file to map the key to. - May not be an absolute path. - May not contain the path element '..'. - May not start with the string '..'. - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - optional: - description: optional field specify whether - the Secret or its key must be defined - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - description: serviceAccountToken is information - about the serviceAccountToken data to project - properties: - audience: - description: |- - audience is the intended audience of the token. A recipient of a token - must identify itself with an identifier specified in the audience of the - token, and otherwise should reject the token. The audience defaults to the - identifier of the apiserver. - type: string - expirationSeconds: - description: |- - expirationSeconds is the requested duration of validity of the service - account token. As the token approaches expiration, the kubelet volume - plugin will proactively rotate the service account token. The kubelet will - start trying to rotate the token if the token is older than 80 percent of - its time to live or if the token is older than 24 hours.Defaults to 1 hour - and must be at least 10 minutes. - format: int64 - type: integer - path: - description: |- - path is the path relative to the mount point of the file to project the - token into. - type: string - required: - - path - type: object - type: object - type: array - x-kubernetes-list-type: atomic - type: object - quobyte: - description: quobyte represents a Quobyte mount on the - host that shares a pod's lifetime - properties: - group: - description: |- - group to map volume access to - Default is no group - type: string - readOnly: - description: |- - readOnly here will force the Quobyte volume to be mounted with read-only permissions. - Defaults to false. - type: boolean - registry: - description: |- - registry represents a single or multiple Quobyte Registry services - specified as a string as host:port pair (multiple entries are separated with commas) - which acts as the central registry for volumes - type: string - tenant: - description: |- - tenant owning the given Quobyte volume in the Backend - Used with dynamically provisioned Quobyte volumes, value is set by the plugin - type: string - user: - description: |- - user to map volume access to - Defaults to serivceaccount user - type: string - volume: - description: volume is a string that references - an already created Quobyte volume by name. - type: string - required: - - registry - - volume - type: object - rbd: - description: |- - rbd represents a Rados Block Device mount on the host that shares a pod's lifetime. - More info: https://examples.k8s.io/volumes/rbd/README.md - properties: - fsType: - description: |- - fsType is the filesystem type of the volume that you want to mount. - Tip: Ensure that the filesystem type is supported by the host operating system. - Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd - type: string - image: - description: |- - image is the rados image name. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it - type: string - keyring: - default: /etc/ceph/keyring - description: |- - keyring is the path to key ring for RBDUser. - Default is /etc/ceph/keyring. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it - type: string - monitors: - description: |- - monitors is a collection of Ceph monitors. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it - items: - type: string - type: array - x-kubernetes-list-type: atomic - pool: - default: rbd - description: |- - pool is the rados pool name. - Default is rbd. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it - type: string - readOnly: - description: |- - readOnly here will force the ReadOnly setting in VolumeMounts. - Defaults to false. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it - type: boolean - secretRef: - description: |- - secretRef is name of the authentication secret for RBDUser. If provided - overrides keyring. - Default is nil. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - user: - default: admin - description: |- - user is the rados user name. - Default is admin. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it - type: string - required: - - image - - monitors - type: object - scaleIO: - description: scaleIO represents a ScaleIO persistent - volume attached and mounted on Kubernetes nodes. - properties: - fsType: - default: xfs - description: |- - fsType is the filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs", "ntfs". - Default is "xfs". - type: string - gateway: - description: gateway is the host address of the - ScaleIO API Gateway. - type: string - protectionDomain: - description: protectionDomain is the name of the - ScaleIO Protection Domain for the configured storage. - type: string - readOnly: - description: |- - readOnly Defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - type: boolean - secretRef: - description: |- - secretRef references to the secret for ScaleIO user and other - sensitive information. If this is not provided, Login operation will fail. - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - description: sslEnabled Flag enable/disable SSL - communication with Gateway, default false - type: boolean - storageMode: - default: ThinProvisioned - description: |- - storageMode indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. - Default is ThinProvisioned. - type: string - storagePool: - description: storagePool is the ScaleIO Storage - Pool associated with the protection domain. - type: string - system: - description: system is the name of the storage system - as configured in ScaleIO. - type: string - volumeName: - description: |- - volumeName is the name of a volume already created in the ScaleIO system - that is associated with this volume source. - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - description: |- - secret represents a secret that should populate this volume. - More info: https://kubernetes.io/docs/concepts/storage/volumes#secret - properties: - defaultMode: - description: |- - defaultMode is Optional: mode bits used to set permissions on created files by default. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values - for mode bits. Defaults to 0644. - Directories within the path are not affected by this setting. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - items: - description: |- - items If unspecified, each key-value pair in the Data field of the referenced - Secret will be projected into the volume as a file whose name is the - key and content is the value. If specified, the listed keys will be - projected into the specified paths, and unlisted keys will not be - present. If a key is specified which is not present in the Secret, - the volume setup will error unless it is marked optional. Paths must be - relative and may not contain the '..' path or start with '..'. - items: - description: Maps a string key to a path within - a volume. - properties: - key: - description: key is the key to project. - type: string - mode: - description: |- - mode is Optional: mode bits used to set permissions on this file. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - If not specified, the volume defaultMode will be used. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - path: - description: |- - path is the relative path of the file to map the key to. - May not be an absolute path. - May not contain the path element '..'. - May not start with the string '..'. - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - optional: - description: optional field specify whether the - Secret or its keys must be defined - type: boolean - secretName: - description: |- - secretName is the name of the secret in the pod's namespace to use. - More info: https://kubernetes.io/docs/concepts/storage/volumes#secret - type: string - type: object - storageos: - description: storageOS represents a StorageOS volume - attached and mounted on Kubernetes nodes. - properties: - fsType: - description: |- - fsType is the filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - type: string - readOnly: - description: |- - readOnly defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - type: boolean - secretRef: - description: |- - secretRef specifies the secret to use for obtaining the StorageOS API - credentials. If not specified, default values will be attempted. - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - description: |- - volumeName is the human-readable name of the StorageOS volume. Volume - names are only unique within a namespace. - type: string - volumeNamespace: - description: |- - volumeNamespace specifies the scope of the volume within StorageOS. If no - namespace is specified then the Pod's namespace will be used. This allows the - Kubernetes name scoping to be mirrored within StorageOS for tighter integration. - Set VolumeName to any name to override the default behaviour. - Set to "default" if you are not using namespaces within StorageOS. - Namespaces that do not pre-exist within StorageOS will be created. - type: string - type: object - vsphereVolume: - description: vsphereVolume represents a vSphere volume - attached and mounted on kubelets host machine - properties: - fsType: - description: |- - fsType is filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - type: string - storagePolicyID: - description: storagePolicyID is the storage Policy - Based Management (SPBM) profile ID associated - with the StoragePolicyName. - type: string - storagePolicyName: - description: storagePolicyName is the storage Policy - Based Management (SPBM) profile name. - type: string - volumePath: - description: volumePath is the path that identifies - vSphere volume vmdk - type: string - required: - - volumePath - type: object - required: - - name - type: object - type: array - xdsAddress: - description: The customized XDS address to retrieve configuration. - type: string - type: object - type: object - version: - default: v1.24.1 - description: |- - Defines the version of Istio to install. - Must be one of: v1.24.1. - enum: - - v1.24.1 - type: string - required: - - namespace - - version - type: object - status: - description: ZTunnelStatus defines the observed state of ZTunnel - properties: - conditions: - description: Represents the latest available observations of the object's - current state. - items: - description: ZTunnelCondition represents a specific observation - of the ZTunnel object's state. - properties: - 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 - the last transition. - type: string - reason: - description: Unique, single-word, CamelCase reason for the condition's - last transition. - type: string - status: - description: The status of this condition. Can be True, False - or Unknown. - type: string - type: - description: The type of this condition. - type: string - type: object - type: array - observedGeneration: - description: |- - ObservedGeneration is the most recent generation observed for this - ZTunnel object. It corresponds to the object's generation, which is - updated on mutation by the API Server. The information in the status - pertains to this particular generation of the object. - format: int64 - type: integer - state: - description: Reports the current state of the object. - type: string - type: object - type: object - x-kubernetes-validations: - - message: metadata.name must be 'default' - rule: self.metadata.name == 'default' - served: true - storage: true - subresources: - status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: null - storedVersions: null diff --git a/bundle/metadata/annotations.yaml b/bundle/metadata/annotations.yaml index 1be7cb239..33e8b3217 100644 --- a/bundle/metadata/annotations.yaml +++ b/bundle/metadata/annotations.yaml @@ -4,7 +4,7 @@ annotations: operators.operatorframework.io.bundle.manifests.v1: manifests/ operators.operatorframework.io.bundle.metadata.v1: metadata/ operators.operatorframework.io.bundle.package.v1: sailoperator - operators.operatorframework.io.bundle.channels.v1: "dev-0.2" + operators.operatorframework.io.bundle.channels.v1: "stable-0.2" operators.operatorframework.io.metrics.builder: operator-sdk-v1.38.0 operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 operators.operatorframework.io.metrics.project_layout: go.kubebuilder.io/v4 diff --git a/chart/crds/sailoperator.io_ztunnels.yaml b/chart/crds/sailoperator.io_ztunnels.yaml deleted file mode 100644 index 74b06e6b7..000000000 --- a/chart/crds/sailoperator.io_ztunnels.yaml +++ /dev/null @@ -1,5527 +0,0 @@ ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.16.5 - name: ztunnels.sailoperator.io -spec: - group: sailoperator.io - names: - categories: - - istio-io - kind: ZTunnel - listKind: ZTunnelList - plural: ztunnels - singular: ztunnel - scope: Cluster - versions: - - additionalPrinterColumns: - - description: Whether the Istio ztunnel installation is ready to handle requests. - jsonPath: .status.conditions[?(@.type=="Ready")].status - name: Ready - type: string - - description: The current state of this object. - jsonPath: .status.state - name: Status - type: string - - description: The version of the Istio ztunnel installation. - jsonPath: .spec.version - name: Version - type: string - - description: The age of the object - jsonPath: .metadata.creationTimestamp - name: Age - type: date - name: v1alpha1 - schema: - openAPIV3Schema: - description: ZTunnel represents a deployment of the Istio ztunnel component. - properties: - apiVersion: - description: |- - 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 - type: string - kind: - description: |- - 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 - type: string - metadata: - type: object - spec: - default: - namespace: ztunnel - profile: ambient - version: v1.24.0 - description: ZTunnelSpec defines the desired state of ZTunnel - properties: - namespace: - default: ztunnel - description: Namespace to which the Istio ztunnel component should - be installed. - type: string - profile: - default: ambient - description: |- - The built-in installation configuration profile to use. - The 'default' profile is 'ambient' and it is always applied. - Must be one of: ambient, default, demo, empty, external, preview, remote, stable. - enum: - - ambient - - default - - demo - - empty - - external - - openshift-ambient - - openshift - - preview - - remote - - stable - type: string - values: - description: Defines the values to be passed to the Helm charts when - installing Istio ztunnel. - properties: - global: - description: Part of the global configuration applicable to the - Istio ztunnel component. - properties: - defaultResources: - description: |- - See https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container - - Deprecated: Marked as deprecated in pkg/apis/values_types.proto. - properties: - claims: - description: |- - Claims lists the names of resources, defined in spec.resourceClaims, - that are used by this container. - - This is an alpha field and requires enabling the - DynamicResourceAllocation feature gate. - - This field is immutable. It can only be set for containers. - items: - description: ResourceClaim references one entry in PodSpec.ResourceClaims. - properties: - name: - description: |- - Name must match the name of one entry in pod.spec.resourceClaims of - the Pod where this field is used. It makes that resource available - inside a container. - type: string - request: - description: |- - Request is the name chosen for a request in the referenced claim. - If empty, everything from the claim is made available, otherwise - only the result of this request. - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: |- - Limits describes the maximum amount of compute resources allowed. - More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: |- - Requests describes the minimum amount of compute resources required. - If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, - otherwise to an implementation-defined value. Requests cannot exceed Limits. - More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - type: object - type: object - hub: - description: Specifies the docker hub for Istio images. - type: string - imagePullPolicy: - description: |- - Specifies the image pull policy for the Istio images. one of Always, Never, IfNotPresent. - Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. - - More info: https://kubernetes.io/docs/concepts/containers/images#updating-images - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - description: |- - ImagePullSecrets for the control plane ServiceAccount, list of secrets in the same namespace - to use for pulling any images in pods that reference this ServiceAccount. - Must be set for any cluster configured with private docker registry. - items: - type: string - type: array - logAsJSON: - description: Specifies whether istio components should output - logs in json format by adding --log_as_json argument to - each container. - type: boolean - logging: - description: Specifies the global logging level settings for - the Istio control plane components. - properties: - level: - description: |- - Comma-separated minimum per-scope logging level of messages to output, in the form of :,: - The control plane has different scopes depending on component, but can configure default log level across all components - If empty, default scope and level will be used as configured in code - type: string - type: object - platform: - description: |- - Platform in which Istio is deployed. Possible values are: "openshift" and "gcp" - An empty value means it is a vanilla Kubernetes distribution, therefore no special - treatment will be considered. - type: string - tag: - description: Specifies the tag for the Istio docker images. - type: string - variant: - description: The variant of the Istio container images to - use. Options are "debug" or "distroless". Unset will use - the default for the given version. - type: string - type: object - ztunnel: - description: Configuration for the Istio ztunnel plugin. - properties: - Annotations: - additionalProperties: - type: string - description: Annotations to apply to all top level resources - type: object - Labels: - additionalProperties: - type: string - description: Labels to apply to all top level resources - type: object - caAddress: - description: The address of the CA for CSR. - type: string - env: - additionalProperties: - type: string - description: 'A `key: value` mapping of environment variables - to add to the pod' - type: object - hub: - description: Hub to pull the container image from. Image will - be `Hub/Image:Tag-Variant`. - type: string - image: - description: |- - Image name to pull from. Image will be `Hub/Image:Tag-Variant`. - If Image contains a "/", it will replace the entire `image` in the pod. - type: string - imagePullPolicy: - description: |- - Specifies the image pull policy for the Istio images. one of Always, Never, IfNotPresent. - Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. - - More info: https://kubernetes.io/docs/concepts/containers/images#updating-images - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - description: |- - List of secret names to add to the service account as image pull secrets - to use for pulling any images in pods that reference this ServiceAccount. - Must be set for any cluster configured with private docker registry. - items: - type: string - type: array - istioNamespace: - description: Specifies the default namespace for the Istio - control plane components. - type: string - logAsJSON: - description: Specifies whether istio components should output - logs in json format by adding --log_as_json argument to - each container. - type: boolean - logging: - description: Same as `global.logging.level`, but will override - it if set - properties: - level: - description: |- - Comma-separated minimum per-scope logging level of messages to output, in the form of :,: - The control plane has different scopes depending on component, but can configure default log level across all components - If empty, default scope and level will be used as configured in code - type: string - type: object - meshConfig: - description: |- - meshConfig defines runtime configuration of components. - For ztunnel, only defaultConfig is used, but this is nested under `meshConfig` for consistency with other components. - properties: - accessLogEncoding: - description: |- - Encoding for the proxy access log (`TEXT` or `JSON`). - Default value is `TEXT`. - enum: - - TEXT - - JSON - type: string - accessLogFile: - description: |- - File address for the proxy access log (e.g. /dev/stdout). - Empty value disables access logging. - type: string - accessLogFormat: - description: |- - Format for the proxy access log - Empty value results in proxy's default access log format - type: string - ca: - description: |- - If specified, Istiod will authorize and forward the CSRs from the workloads to the specified external CA - using the Istio CA gRPC API. - properties: - address: - description: |- - REQUIRED. Address of the CA server implementing the Istio CA gRPC API. - Can be IP address or a fully qualified DNS name with port - Eg: custom-ca.default.svc.cluster.local:8932, 192.168.23.2:9000 - type: string - istiodSide: - description: |- - Use istiodSide to specify CA Server integrate to Istiod side or Agent side - Default: true - type: boolean - requestTimeout: - description: |- - timeout for forward CSR requests from Istiod to External CA - Default: 10s - type: string - tlsSettings: - description: |- - Use the tlsSettings to specify the tls mode to use. - Regarding tlsSettings: - - DISABLE MODE is legitimate for the case Istiod is making the request via an Envoy sidecar. - DISABLE MODE can also be used for testing - - TLS MUTUAL MODE be on by default. If the CA certificates - (cert bundle to verify the CA server's certificate) is omitted, Istiod will - use the system root certs to verify the CA server's certificate. - properties: - caCertificates: - description: |- - OPTIONAL: The path to the file containing certificate authority - certificates to use in verifying a presented server certificate. If - omitted, the proxy will verify the server's certificate using - the OS CA certificates. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - caCrl: - description: |- - OPTIONAL: The path to the file containing the certificate revocation list (CRL) - to use in verifying a presented server certificate. `CRL` is a list of certificates - that have been revoked by the CA (Certificate Authority) before their scheduled expiration date. - If specified, the proxy will verify if the presented certificate is part of the revoked list of certificates. - If omitted, the proxy will not verify the certificate against the `crl`. Note that if `credentialName` is set, - `CRL` cannot be specified using `caCrl`, rather it has to be specified inside the credential. - type: string - clientCertificate: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client-side TLS certificate to use. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - credentialName: - description: |- - The name of the secret that holds the TLS certs for the - client including the CA certificates. This secret must exist in - the namespace of the proxy using the certificates. - An Opaque secret should contain the following keys and values: - `key: `, `cert: `, `cacert: `, - `crl: ` - Here CACertificate is used to verify the server certificate. - For mutual TLS, `cacert: ` can be provided in the - same secret or a separate secret named `-cacert`. - A TLS secret for client certificates with an additional - `ca.crt` key for CA certificates and `ca.crl` key for - certificate revocation list(CRL) is also supported. - Only one of client certificates and CA certificate - or credentialName can be specified. - - **NOTE:** This field is applicable at sidecars only if - `DestinationRule` has a `workloadSelector` specified. - Otherwise the field will be applicable only at gateways, and - sidecars will continue to use the certificate paths. - type: string - insecureSkipVerify: - description: |- - `insecureSkipVerify` specifies whether the proxy should skip verifying the - CA signature and SAN for the server certificate corresponding to the host. - The default value of this field is false. - type: boolean - mode: - description: |- - Indicates whether connections to this port should be secured - using TLS. The value of this field determines how TLS is enforced. - enum: - - DISABLE - - SIMPLE - - MUTUAL - - ISTIO_MUTUAL - type: string - privateKey: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client's private key. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - sni: - description: |- - SNI string to present to the server during TLS handshake. - If unspecified, SNI will be automatically set based on downstream HTTP - host/authority header for SIMPLE and MUTUAL TLS modes. - type: string - subjectAltNames: - description: |- - A list of alternate names to verify the subject identity in the - certificate. If specified, the proxy will verify that the server - certificate's subject alt name matches one of the specified values. - If specified, this list overrides the value of subject_alt_names - from the ServiceEntry. If unspecified, automatic validation of upstream - presented certificate for new upstream connections will be done based on the - downstream HTTP host/authority header. - items: - type: string - type: array - type: object - required: - - address - type: object - caCertificates: - description: |- - The extra root certificates for workload-to-workload communication. - The plugin certificates (the 'cacerts' secret) or self-signed certificates (the 'istio-ca-secret' secret) - are automatically added by Istiod. - The CA certificate that signs the workload certificates is automatically added by Istio Agent. - items: - properties: - certSigners: - description: |- - when Istiod is acting as RA(registration authority) - If set, they are used for these signers. Otherwise, this trustAnchor is used for all signers. - items: - type: string - type: array - pem: - description: The PEM data of the certificate. - type: string - spiffeBundleUrl: - description: |- - The SPIFFE bundle endpoint URL that complies to: - https://github.com/spiffe/spiffe/blob/master/standards/SPIFFE_Trust_Domain_and_Bundle.md#the-spiffe-trust-domain-and-bundle - The endpoint should support authentication based on Web PKI: - https://github.com/spiffe/spiffe/blob/master/standards/SPIFFE_Trust_Domain_and_Bundle.md#521-web-pki - The certificate is retrieved from the endpoint. - type: string - trustDomains: - description: |- - Optional. Specify the list of trust domains to which this trustAnchor data belongs. - If set, they are used for these trust domains. Otherwise, this trustAnchor is used for default trust domain - and its aliases. - Note that we can have multiple trustAnchor data for a same trustDomain. - In that case, trustAnchors with a same trust domain will be merged and used together to verify peer certificates. - If neither certSigners nor trustDomains is set, this trustAnchor is used for all trust domains and all signers. - If only trustDomains is set, this trustAnchor is used for these trustDomains and all signers. - If only certSigners is set, this trustAnchor is used for these certSigners and all trust domains. - If both certSigners and trustDomains is set, this trustAnchor is only used for these signers and trust domains. - items: - type: string - type: array - type: object - x-kubernetes-validations: - - message: At most one of [pem spiffeBundleUrl] should - be set - rule: (has(self.pem)?1:0) + (has(self.spiffeBundleUrl)?1:0) - <= 1 - type: array - certificates: - description: |- - Configure the provision of certificates. - - Note: Deprecated, please refer to Cert-Manager or other cert provisioning solutions to sign DNS certificates. - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - items: - description: "Certificate configures the provision of - a certificate and its key.\nExample 1: key and cert - stored in a secret\n```\n{ secretName: galley-cert\n\n\t - \ secretNamespace: istio-system\n\t dnsNames:\n\t - \ - galley.istio-system.svc\n\t - galley.mydomain.com\n\t}\n\n```\nExample - 2: key and cert stored in a directory\n```\n{ dnsNames:\n - \ - pilot.istio-system\n - pilot.istio-system.svc\n - \ - pilot.mydomain.com\n }\n\n```" - properties: - dnsNames: - description: |- - The DNS names for the certificate. A certificate may contain - multiple DNS names. - items: - type: string - type: array - secretName: - description: |- - Name of the secret the certificate and its key will be stored into. - If it is empty, it will not be stored into a secret. - Instead, the certificate and its key will be stored into a hard-coded directory. - type: string - type: object - type: array - configSources: - description: |- - ConfigSource describes a source of configuration data for networking - rules, and other Istio configuration artifacts. Multiple data sources - can be configured for a single control plane. - items: - description: |- - ConfigSource describes information about a configuration store inside a - mesh. A single control plane instance can interact with one or more data - sources. - properties: - address: - description: |- - Address of the server implementing the Istio Mesh Configuration - protocol (MCP). Can be IP address or a fully qualified DNS name. - Use xds:// to specify a grpc-based xds backend, k8s:// to specify a k8s controller or - fs:/// to specify a file-based backend with absolute path to the directory. - type: string - subscribedResources: - description: Describes the source of configuration, - if nothing is specified default is MCP - items: - description: Resource describes the source of - configuration - enum: - - SERVICE_REGISTRY - type: string - type: array - tlsSettings: - description: |- - Use the tlsSettings to specify the tls mode to use. If the MCP server - uses Istio mutual TLS and shares the root CA with Pilot, specify the TLS - mode as `ISTIO_MUTUAL`. - properties: - caCertificates: - description: |- - OPTIONAL: The path to the file containing certificate authority - certificates to use in verifying a presented server certificate. If - omitted, the proxy will verify the server's certificate using - the OS CA certificates. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - caCrl: - description: |- - OPTIONAL: The path to the file containing the certificate revocation list (CRL) - to use in verifying a presented server certificate. `CRL` is a list of certificates - that have been revoked by the CA (Certificate Authority) before their scheduled expiration date. - If specified, the proxy will verify if the presented certificate is part of the revoked list of certificates. - If omitted, the proxy will not verify the certificate against the `crl`. Note that if `credentialName` is set, - `CRL` cannot be specified using `caCrl`, rather it has to be specified inside the credential. - type: string - clientCertificate: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client-side TLS certificate to use. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - credentialName: - description: |- - The name of the secret that holds the TLS certs for the - client including the CA certificates. This secret must exist in - the namespace of the proxy using the certificates. - An Opaque secret should contain the following keys and values: - `key: `, `cert: `, `cacert: `, - `crl: ` - Here CACertificate is used to verify the server certificate. - For mutual TLS, `cacert: ` can be provided in the - same secret or a separate secret named `-cacert`. - A TLS secret for client certificates with an additional - `ca.crt` key for CA certificates and `ca.crl` key for - certificate revocation list(CRL) is also supported. - Only one of client certificates and CA certificate - or credentialName can be specified. - - **NOTE:** This field is applicable at sidecars only if - `DestinationRule` has a `workloadSelector` specified. - Otherwise the field will be applicable only at gateways, and - sidecars will continue to use the certificate paths. - type: string - insecureSkipVerify: - description: |- - `insecureSkipVerify` specifies whether the proxy should skip verifying the - CA signature and SAN for the server certificate corresponding to the host. - The default value of this field is false. - type: boolean - mode: - description: |- - Indicates whether connections to this port should be secured - using TLS. The value of this field determines how TLS is enforced. - enum: - - DISABLE - - SIMPLE - - MUTUAL - - ISTIO_MUTUAL - type: string - privateKey: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client's private key. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - sni: - description: |- - SNI string to present to the server during TLS handshake. - If unspecified, SNI will be automatically set based on downstream HTTP - host/authority header for SIMPLE and MUTUAL TLS modes. - type: string - subjectAltNames: - description: |- - A list of alternate names to verify the subject identity in the - certificate. If specified, the proxy will verify that the server - certificate's subject alt name matches one of the specified values. - If specified, this list overrides the value of subject_alt_names - from the ServiceEntry. If unspecified, automatic validation of upstream - presented certificate for new upstream connections will be done based on the - downstream HTTP host/authority header. - items: - type: string - type: array - type: object - type: object - type: array - connectTimeout: - description: |- - Connection timeout used by Envoy. (MUST BE >=1ms) - Default timeout is 10s. - type: string - defaultConfig: - description: |- - Default proxy config used by gateway and sidecars. - In case of Kubernetes, the proxy config is applied once during the injection process, - and remain constant for the duration of the pod. The rest of the mesh config can be changed - at runtime and config gets distributed dynamically. - On Kubernetes, this can be overridden on individual pods with the `proxy.istio.io/config` annotation. - properties: - availabilityZone: - description: 'Deprecated: Marked as deprecated in - mesh/v1alpha1/proxy.proto.' - type: string - binaryPath: - description: Path to the proxy binary - type: string - caCertificatesPem: - description: |- - The PEM data of the extra root certificates for workload-to-workload communication. - This includes the certificates defined in MeshConfig and any other certificates that Istiod uses as CA. - The plugin certificates (the 'cacerts' secret), self-signed certificates (the 'istio-ca-secret' secret) - are added automatically by Istiod. - items: - type: string - type: array - concurrency: - description: |- - The number of worker threads to run. - If unset, which is recommended, this will be automatically determined based on CPU requests/limits. - If set to 0, all cores on the machine will be used, ignoring CPU requests or limits. This can lead to major performance - issues if CPU limits are also set. - format: int32 - type: integer - configPath: - description: |- - Path to the generated configuration file directory. - Proxy agent generates the actual configuration and stores it in this directory. - type: string - controlPlaneAuthPolicy: - description: |- - AuthenticationPolicy defines how the proxy is authenticated when it connects to the control plane. - Default is set to `MUTUAL_TLS`. - enum: - - NONE - - MUTUAL_TLS - - INHERIT - type: string - customConfigFile: - description: |- - File path of custom proxy configuration, currently used by proxies - in front of Mixer and Pilot. - type: string - discoveryAddress: - description: |- - Address of the discovery service exposing xDS with mTLS connection. - The inject configuration may override this value. - type: string - discoveryRefreshDelay: - description: 'Deprecated: Marked as deprecated in - mesh/v1alpha1/proxy.proto.' - type: string - drainDuration: - description: |- - restart. MUST be >=1s (e.g., _1s/1m/1h_) - Default drain duration is `45s`. - type: string - envoyAccessLogService: - description: |- - Address of the service to which access logs from Envoys should be - sent. (e.g. `accesslog-service:15000`). See [Access Log - Service](https://www.envoyproxy.io/docs/envoy/latest/api-v2/config/accesslog/v2/als.proto) - for details about Envoy's gRPC Access Log Service API. - properties: - address: - description: |- - Address of a remove service used for various purposes (access log - receiver, metrics receiver, etc.). Can be IP address or a fully - qualified DNS name. - type: string - tcpKeepalive: - description: If set then set `SO_KEEPALIVE` on - the socket to enable TCP Keepalives. - properties: - interval: - description: |- - The time duration between keep-alive probes. - Default is to use the OS level configuration - (unless overridden, Linux defaults to 75s.) - type: string - probes: - description: |- - Maximum number of keepalive probes to send without response before - deciding the connection is dead. Default is to use the OS level configuration - (unless overridden, Linux defaults to 9.) - format: int32 - type: integer - time: - description: |- - The time duration a connection needs to be idle before keep-alive - probes start being sent. Default is to use the OS level configuration - (unless overridden, Linux defaults to 7200s (ie 2 hours.) - type: string - type: object - tlsSettings: - description: |- - Use the `tlsSettings` to specify the tls mode to use. If the remote service - uses Istio mutual TLS and shares the root CA with Pilot, specify the TLS - mode as `ISTIO_MUTUAL`. - properties: - caCertificates: - description: |- - OPTIONAL: The path to the file containing certificate authority - certificates to use in verifying a presented server certificate. If - omitted, the proxy will verify the server's certificate using - the OS CA certificates. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - caCrl: - description: |- - OPTIONAL: The path to the file containing the certificate revocation list (CRL) - to use in verifying a presented server certificate. `CRL` is a list of certificates - that have been revoked by the CA (Certificate Authority) before their scheduled expiration date. - If specified, the proxy will verify if the presented certificate is part of the revoked list of certificates. - If omitted, the proxy will not verify the certificate against the `crl`. Note that if `credentialName` is set, - `CRL` cannot be specified using `caCrl`, rather it has to be specified inside the credential. - type: string - clientCertificate: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client-side TLS certificate to use. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - credentialName: - description: |- - The name of the secret that holds the TLS certs for the - client including the CA certificates. This secret must exist in - the namespace of the proxy using the certificates. - An Opaque secret should contain the following keys and values: - `key: `, `cert: `, `cacert: `, - `crl: ` - Here CACertificate is used to verify the server certificate. - For mutual TLS, `cacert: ` can be provided in the - same secret or a separate secret named `-cacert`. - A TLS secret for client certificates with an additional - `ca.crt` key for CA certificates and `ca.crl` key for - certificate revocation list(CRL) is also supported. - Only one of client certificates and CA certificate - or credentialName can be specified. - - **NOTE:** This field is applicable at sidecars only if - `DestinationRule` has a `workloadSelector` specified. - Otherwise the field will be applicable only at gateways, and - sidecars will continue to use the certificate paths. - type: string - insecureSkipVerify: - description: |- - `insecureSkipVerify` specifies whether the proxy should skip verifying the - CA signature and SAN for the server certificate corresponding to the host. - The default value of this field is false. - type: boolean - mode: - description: |- - Indicates whether connections to this port should be secured - using TLS. The value of this field determines how TLS is enforced. - enum: - - DISABLE - - SIMPLE - - MUTUAL - - ISTIO_MUTUAL - type: string - privateKey: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client's private key. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - sni: - description: |- - SNI string to present to the server during TLS handshake. - If unspecified, SNI will be automatically set based on downstream HTTP - host/authority header for SIMPLE and MUTUAL TLS modes. - type: string - subjectAltNames: - description: |- - A list of alternate names to verify the subject identity in the - certificate. If specified, the proxy will verify that the server - certificate's subject alt name matches one of the specified values. - If specified, this list overrides the value of subject_alt_names - from the ServiceEntry. If unspecified, automatic validation of upstream - presented certificate for new upstream connections will be done based on the - downstream HTTP host/authority header. - items: - type: string - type: array - type: object - type: object - envoyMetricsService: - description: |- - Address of the Envoy Metrics Service implementation (e.g. `metrics-service:15000`). - See [Metric Service](https://www.envoyproxy.io/docs/envoy/latest/api-v2/config/metrics/v2/metrics_service.proto) - for details about Envoy's Metrics Service API. - properties: - address: - description: |- - Address of a remove service used for various purposes (access log - receiver, metrics receiver, etc.). Can be IP address or a fully - qualified DNS name. - type: string - tcpKeepalive: - description: If set then set `SO_KEEPALIVE` on - the socket to enable TCP Keepalives. - properties: - interval: - description: |- - The time duration between keep-alive probes. - Default is to use the OS level configuration - (unless overridden, Linux defaults to 75s.) - type: string - probes: - description: |- - Maximum number of keepalive probes to send without response before - deciding the connection is dead. Default is to use the OS level configuration - (unless overridden, Linux defaults to 9.) - format: int32 - type: integer - time: - description: |- - The time duration a connection needs to be idle before keep-alive - probes start being sent. Default is to use the OS level configuration - (unless overridden, Linux defaults to 7200s (ie 2 hours.) - type: string - type: object - tlsSettings: - description: |- - Use the `tlsSettings` to specify the tls mode to use. If the remote service - uses Istio mutual TLS and shares the root CA with Pilot, specify the TLS - mode as `ISTIO_MUTUAL`. - properties: - caCertificates: - description: |- - OPTIONAL: The path to the file containing certificate authority - certificates to use in verifying a presented server certificate. If - omitted, the proxy will verify the server's certificate using - the OS CA certificates. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - caCrl: - description: |- - OPTIONAL: The path to the file containing the certificate revocation list (CRL) - to use in verifying a presented server certificate. `CRL` is a list of certificates - that have been revoked by the CA (Certificate Authority) before their scheduled expiration date. - If specified, the proxy will verify if the presented certificate is part of the revoked list of certificates. - If omitted, the proxy will not verify the certificate against the `crl`. Note that if `credentialName` is set, - `CRL` cannot be specified using `caCrl`, rather it has to be specified inside the credential. - type: string - clientCertificate: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client-side TLS certificate to use. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - credentialName: - description: |- - The name of the secret that holds the TLS certs for the - client including the CA certificates. This secret must exist in - the namespace of the proxy using the certificates. - An Opaque secret should contain the following keys and values: - `key: `, `cert: `, `cacert: `, - `crl: ` - Here CACertificate is used to verify the server certificate. - For mutual TLS, `cacert: ` can be provided in the - same secret or a separate secret named `-cacert`. - A TLS secret for client certificates with an additional - `ca.crt` key for CA certificates and `ca.crl` key for - certificate revocation list(CRL) is also supported. - Only one of client certificates and CA certificate - or credentialName can be specified. - - **NOTE:** This field is applicable at sidecars only if - `DestinationRule` has a `workloadSelector` specified. - Otherwise the field will be applicable only at gateways, and - sidecars will continue to use the certificate paths. - type: string - insecureSkipVerify: - description: |- - `insecureSkipVerify` specifies whether the proxy should skip verifying the - CA signature and SAN for the server certificate corresponding to the host. - The default value of this field is false. - type: boolean - mode: - description: |- - Indicates whether connections to this port should be secured - using TLS. The value of this field determines how TLS is enforced. - enum: - - DISABLE - - SIMPLE - - MUTUAL - - ISTIO_MUTUAL - type: string - privateKey: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client's private key. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - sni: - description: |- - SNI string to present to the server during TLS handshake. - If unspecified, SNI will be automatically set based on downstream HTTP - host/authority header for SIMPLE and MUTUAL TLS modes. - type: string - subjectAltNames: - description: |- - A list of alternate names to verify the subject identity in the - certificate. If specified, the proxy will verify that the server - certificate's subject alt name matches one of the specified values. - If specified, this list overrides the value of subject_alt_names - from the ServiceEntry. If unspecified, automatic validation of upstream - presented certificate for new upstream connections will be done based on the - downstream HTTP host/authority header. - items: - type: string - type: array - type: object - type: object - envoyMetricsServiceAddress: - description: 'Deprecated: Marked as deprecated in - mesh/v1alpha1/proxy.proto.' - type: string - extraStatTags: - description: |- - An additional list of tags to extract from the in-proxy Istio telemetry. These extra tags can be - added by configuring the telemetry extension. Each additional tag needs to be present in this list. - Extra tags emitted by the telemetry extensions must be listed here so that they can be processed - and exposed as Prometheus metrics. - Deprecated: `istio.stats` is a native filter now, this field is no longer needed. - items: - type: string - type: array - gatewayTopology: - description: |- - Topology encapsulates the configuration which describes where the proxy is - located i.e. behind a (or N) trusted proxy (proxies) or directly exposed - to the internet. This configuration only effects gateways and is applied - to all the gateways in the cluster unless overridden via annotations of the - gateway workloads. - properties: - forwardClientCertDetails: - description: |- - Configures how the gateway proxy handles x-forwarded-client-cert (XFCC) - header in the incoming request. - enum: - - UNDEFINED - - SANITIZE - - FORWARD_ONLY - - APPEND_FORWARD - - SANITIZE_SET - - ALWAYS_FORWARD_ONLY - type: string - numTrustedProxies: - description: |- - Number of trusted proxies deployed in front of the Istio gateway proxy. - When this option is set to value N greater than zero, the trusted client - address is assumed to be the Nth address from the right end of the - X-Forwarded-For (XFF) header from the incoming request. If the - X-Forwarded-For (XFF) header is missing or has fewer than N addresses, the - gateway proxy falls back to using the immediate downstream connection's - source address as the trusted client address. - Note that the gateway proxy will append the downstream connection's source - address to the X-Forwarded-For (XFF) address and set the - X-Envoy-External-Address header to the trusted client address before - forwarding it to the upstream services in the cluster. - The default value of numTrustedProxies is 0. - See [Envoy XFF](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#config-http-conn-man-headers-x-forwarded-for) - header handling for more details. - format: int32 - type: integer - proxyProtocol: - description: |- - Enables [PROXY protocol](http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt) for - downstream connections on a gateway. - type: object - type: object - holdApplicationUntilProxyStarts: - description: |- - Boolean flag for enabling/disabling the holdApplicationUntilProxyStarts behavior. - This feature adds hooks to delay application startup until the pod proxy - is ready to accept traffic, mitigating some startup race conditions. - Default value is 'false'. - type: boolean - image: - description: Specifies the details of the proxy image. - properties: - imageType: - description: |- - The image type of the image. - Istio publishes default, debug, and distroless images. - Other values are allowed if those image types (example: centos) are published to the specified hub. - supported values: default, debug, distroless. - type: string - type: object - interceptionMode: - description: The mode used to redirect inbound traffic - to Envoy. - enum: - - REDIRECT - - TPROXY - - NONE - type: string - meshId: - description: |- - The unique identifier for the [service mesh](https://istio.io/docs/reference/glossary/#service-mesh) - All control planes running in the same service mesh should specify the same mesh ID. - Mesh ID is used to label telemetry reports for cases where telemetry from multiple meshes is mixed together. - type: string - privateKeyProvider: - description: Specifies the details of the Private - Key Provider configuration for gateway and sidecar - proxies. - properties: - cryptomb: - description: Use CryptoMb private key provider - properties: - fallback: - description: |- - If the private key provider isn’t available (eg. the required hardware capability doesn’t existed) - Envoy will fallback to the BoringSSL default implementation when the fallback is true. - The default value is false. - type: boolean - pollDelay: - description: |- - How long to wait until the per-thread processing queue should be processed. If the processing queue - gets full (eight sign or decrypt requests are received) it is processed immediately. - However, if the queue is not filled before the delay has expired, the requests already in the queue - are processed, even if the queue is not full. - In effect, this value controls the balance between latency and throughput. - The duration needs to be set to a value greater than or equal to 1 millisecond. - type: string - type: object - qat: - description: Use QAT private key provider - properties: - fallback: - description: |- - If the private key provider isn’t available (eg. the required hardware capability doesn’t existed) - Envoy will fallback to the BoringSSL default implementation when the fallback is true. - The default value is false. - type: boolean - pollDelay: - description: |- - How long to wait before polling the hardware accelerator after a request has been submitted there. - Having a small value leads to quicker answers from the hardware but causes more polling loop spins, - leading to potentially larger CPU usage. - The duration needs to be set to a value greater than or equal to 1 millisecond. - type: string - type: object - type: object - x-kubernetes-validations: - - message: At most one of [cryptomb qat] should be - set - rule: (has(self.cryptomb)?1:0) + (has(self.qat)?1:0) - <= 1 - proxyAdminPort: - description: |- - Port on which Envoy should listen for administrative commands. - Default port is `15000`. - format: int32 - type: integer - proxyBootstrapTemplatePath: - description: Path to the proxy bootstrap template - file - type: string - proxyHeaders: - description: "Define the set of headers to add/modify - for HTTP request/responses.\n\nTo enable an optional - header, simply set the field. If no specific configuration - is required, an empty object (`{}`) will enable - it.\nNote: currently all headers are enabled by - default.\n\nBelow shows an example of customizing - the `server` header and disabling the `X-Envoy-Attempt-Count` - header:\n\n```yaml\nproxyHeaders:\n\n\tserver:\n\t - \ value: \"my-custom-server\"\n\trequestId: {} // - Explicitly enable Request IDs. As this is the default, - this has no effect.\n\tattemptCount:\n\t disabled: - true\n\n```\n\nSome headers are enabled by default, - and require explicitly disabling. See below for - an example of disabling all default-enabled headers:\n\n```yaml\nproxyHeaders:\n\n\tforwardedClientCert: - SANITIZE\n\tserver:\n\t disabled: true\n\trequestId:\n\t - \ disabled: true\n\tattemptCount:\n\t disabled: - true\n\tenvoyDebugHeaders:\n\t disabled: true\n\tmetadataExchangeHeaders:\n\t - \ mode: IN_MESH\n\n```" - properties: - attemptCount: - description: |- - Controls the `X-Envoy-Attempt-Count` header. - If enabled, this header will be added on outbound request headers (including gateways) that have retries configured. - If disabled, this header will not be set. If it is already present, it will be preserved. - This header is enabled by default if not configured. - properties: - disabled: - type: boolean - type: object - envoyDebugHeaders: - description: |- - Controls various `X-Envoy-*` headers, such as `X-Envoy-Overloaded` and `X-Envoy-Upstream-Service-Time`. If enabled, - these headers will be included. - If disabled, these headers will not be set. If they are already present, they will be preserved. - See the [Envoy documentation](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/router/v3/router.proto#envoy-v3-api-field-extensions-filters-http-router-v3-router-suppress-envoy-headers) for more details. - These headers are enabled by default if not configured. - properties: - disabled: - type: boolean - type: object - forwardedClientCert: - description: |- - Controls the `X-Forwarded-Client-Cert` header for inbound sidecar requests. To set this on gateways, use the `Topology` setting. - To disable the header, configure either `SANITIZE` (to always remove the header, if present) or `FORWARD_ONLY` (to leave the header as-is). - By default, `APPEND_FORWARD` will be used. - enum: - - UNDEFINED - - SANITIZE - - FORWARD_ONLY - - APPEND_FORWARD - - SANITIZE_SET - - ALWAYS_FORWARD_ONLY - type: string - metadataExchangeHeaders: - description: |- - Controls Istio metadata exchange headers `X-Envoy-Peer-Metadata` and `X-Envoy-Peer-Metadata-Id`. - By default, the behavior is unspecified. - If IN_MESH, these headers will not be appended to outbound requests from sidecars to services not in-mesh. - properties: - mode: - enum: - - UNDEFINED - - IN_MESH - type: string - type: object - requestId: - description: |- - Controls the `X-Request-Id` header. If enabled, a request ID is generated for each request if one is not already set. - This applies to all types of traffic (inbound, outbound, and gateways). - If disabled, no request ID will be generate for the request. If it is already present, it will be preserved. - Warning: request IDs are a critical component to mesh tracing and logging, so disabling this is not recommended. - This header is enabled by default if not configured. - properties: - disabled: - type: boolean - type: object - server: - description: |- - Controls the `server` header. If enabled, the `Server: istio-envoy` header is set in response headers for inbound traffic (including gateways). - If disabled, the `Server` header is not modified. If it is already present, it will be preserved. - properties: - disabled: - type: boolean - value: - description: If set, and the server header - is enabled, this value will be set as the - server header. By default, `istio-envoy` - will be used. - type: string - type: object - setCurrentClientCertDetails: - description: |- - This field is valid only when forward_client_cert_details is APPEND_FORWARD or SANITIZE_SET - and the client connection is mTLS. It specifies the fields in - the client certificate to be forwarded. Note that `Hash` is always set, and - `By` is always set when the client certificate presents the URI type Subject Alternative Name value. - properties: - cert: - description: |- - Whether to forward the entire client cert in URL encoded PEM format. This will appear in the - XFCC header comma separated from other values with the value Cert="PEM". - Defaults to false. - type: boolean - chain: - description: |- - Whether to forward the entire client cert chain (including the leaf cert) in URL encoded PEM - format. This will appear in the XFCC header comma separated from other values with the value - Chain="PEM". - Defaults to false. - type: boolean - dns: - description: |- - Whether to forward the DNS type Subject Alternative Names of the client cert. - Defaults to true. - type: boolean - subject: - description: Whether to forward the subject - of the client cert. Defaults to true. - type: boolean - uri: - description: |- - Whether to forward the URI type Subject Alternative Name of the client cert. Defaults to - true. - type: boolean - type: object - type: object - proxyMetadata: - additionalProperties: - type: string - description: |- - Additional environment variables for the proxy. - Names starting with `ISTIO_META_` will be included in the generated bootstrap and sent to the XDS server. - type: object - proxyStatsMatcher: - description: "Proxy stats matcher defines configuration - for reporting custom Envoy stats.\nTo reduce memory - and CPU overhead from Envoy stats system, Istio - proxies by\ndefault create and expose only a subset - of Envoy stats. This option is to\ncontrol creation - of additional Envoy stats with prefix, suffix, and - regex\nexpressions match on the name of the stats. - This replaces the stats\ninclusion annotations\n(`sidecar.istio.io/statsInclusionPrefixes`,\n`sidecar.istio.io/statsInclusionRegexps`, - and\n`sidecar.istio.io/statsInclusionSuffixes`). - For example, to enable stats\nfor circuit breakers, - request retries, upstream connections, and request - timeouts,\nyou can specify stats matcher as follows:\n```yaml\nproxyStatsMatcher:\n\n\tinclusionRegexps:\n\t - \ - .*outlier_detection.*\n\t - .*upstream_rq_retry.*\n\t - \ - .*upstream_cx_.*\n\tinclusionSuffixes:\n\t - - upstream_rq_timeout\n\n```\nNote including more - Envoy stats might increase number of time series\ncollected - by prometheus significantly. Care needs to be taken - on Prometheus\nresource provision and configuration - to reduce cardinality." - properties: - inclusionPrefixes: - description: Proxy stats name prefix matcher for - inclusion. - items: - type: string - type: array - inclusionRegexps: - description: Proxy stats name regexps matcher - for inclusion. - items: - type: string - type: array - inclusionSuffixes: - description: Proxy stats name suffix matcher for - inclusion. - items: - type: string - type: array - type: object - readinessProbe: - description: |- - VM Health Checking readiness probe. This health check config exactly mirrors the - kubernetes readiness probe configuration both in schema and logic. - Only one health check method of 3 can be set at a time. - properties: - exec: - description: Exec specifies the action to take. - properties: - command: - description: |- - Command is the command line to execute inside the container, the working directory for the - command is root ('/') in the container's filesystem. The command is simply exec'd, it is - not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use - a shell, you need to explicitly call out to that shell. - Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - description: |- - Minimum consecutive failures for the probe to be considered failed after having succeeded. - Defaults to 3. Minimum value is 1. - format: int32 - type: integer - grpc: - description: GRPC specifies an action involving - a GRPC port. - properties: - port: - description: Port number of the gRPC service. - Number must be in the range 1 to 65535. - format: int32 - type: integer - service: - default: "" - description: |- - Service is the name of the service to place in the gRPC HealthCheckRequest - (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). - - If this is not specified, the default behavior is defined by gRPC. - type: string - required: - - port - type: object - httpGet: - description: HTTPGet specifies the http request - to perform. - properties: - host: - description: |- - Host name to connect to, defaults to the pod IP. You probably want to set - "Host" in httpHeaders instead. - type: string - httpHeaders: - description: Custom headers to set in the - request. HTTP allows repeated headers. - items: - description: HTTPHeader describes a custom - header to be used in HTTP probes - properties: - name: - description: |- - The header field name. - This will be canonicalized upon output, so case-variant names will be understood as the same header. - type: string - value: - description: The header field value - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - description: Path to access on the HTTP server. - type: string - port: - anyOf: - - type: integer - - type: string - description: |- - Name or number of the port to access on the container. - Number must be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - x-kubernetes-int-or-string: true - scheme: - description: |- - Scheme to use for connecting to the host. - Defaults to HTTP. - type: string - required: - - port - type: object - initialDelaySeconds: - description: |- - Number of seconds after the container has started before liveness probes are initiated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - format: int32 - type: integer - periodSeconds: - description: |- - How often (in seconds) to perform the probe. - Default to 10 seconds. Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - Minimum consecutive successes for the probe to be considered successful after having failed. - Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. - format: int32 - type: integer - tcpSocket: - description: TCPSocket specifies an action involving - a TCP port. - properties: - host: - description: 'Optional: Host name to connect - to, defaults to the pod IP.' - type: string - port: - anyOf: - - type: integer - - type: string - description: |- - Number or name of the port to access on the container. - Number must be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - description: |- - Optional duration in seconds the pod needs to terminate gracefully upon probe failure. - The grace period is the duration in seconds after the processes running in the pod are sent - a termination signal and the time when the processes are forcibly halted with a kill signal. - Set this value longer than the expected cleanup time for your process. - If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this - value overrides the value provided by the pod spec. - Value must be non-negative integer. The value zero indicates stop immediately via - the kill signal (no opportunity to shut down). - This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. - Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset. - format: int64 - type: integer - timeoutSeconds: - description: |- - Number of seconds after which the probe times out. - Defaults to 1 second. Minimum value is 1. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - format: int32 - type: integer - type: object - runtimeValues: - additionalProperties: - type: string - description: |- - Envoy [runtime configuration](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/operations/runtime) to set during bootstrapping. - This enables setting experimental, unsafe, unsupported, and deprecated features that should be used with extreme caution. - type: object - sds: - description: |- - Secret Discovery Service(SDS) configuration to be used by the proxy. - - Deprecated: Marked as deprecated in mesh/v1alpha1/proxy.proto. - properties: - enabled: - description: True if SDS is enabled. - type: boolean - k8sSaJwtPath: - description: Path of k8s service account JWT path. - type: string - type: object - serviceCluster: - description: |- - Service cluster defines the name for the `service_cluster` that is - shared by all Envoy instances. This setting corresponds to - `--service-cluster` flag in Envoy. In a typical Envoy deployment, the - `service-cluster` flag is used to identify the caller, for - source-based routing scenarios. - - Since Istio does not assign a local `service/service` version to each - Envoy instance, the name is same for all of them. However, the - source/caller's identity (e.g., IP address) is encoded in the - `--service-node` flag when launching Envoy. When the RDS service - receives API calls from Envoy, it uses the value of the `service-node` - flag to compute routes that are relative to the service instances - located at that IP address. - type: string - statNameLength: - description: |- - Maximum length of name field in Envoy's metrics. The length of the name field - is determined by the length of a name field in a service and the set of labels that - comprise a particular version of the service. The default value is set to 189 characters. - Envoy's internal metrics take up 67 characters, for a total of 256 character name per metric. - Increase the value of this field if you find that the metrics from Envoys are truncated. - format: int32 - type: integer - statsdUdpAddress: - description: IP Address and Port of a statsd UDP listener - (e.g. `10.75.241.127:9125`). - type: string - statusPort: - description: |- - Port on which the agent should listen for administrative commands such as readiness probe. - Default is set to port `15020`. - format: int32 - type: integer - terminationDrainDuration: - description: |- - The amount of time allowed for connections to complete on proxy shutdown. - On receiving `SIGTERM` or `SIGINT`, `istio-agent` tells the active Envoy to start gracefully draining, - discouraging any new connections and allowing existing connections to complete. It then - sleeps for the `terminationDrainDuration` and then kills any remaining active Envoy processes. - If not set, a default of `5s` will be applied. - type: string - tracing: - description: Tracing configuration to be used by the - proxy. - properties: - customTags: - additionalProperties: - description: |- - Configure custom tags that will be added to any active span. - Tags can be generated via literals, environment variables or an incoming request header. - properties: - environment: - description: |- - The custom tag's value should be populated from an environmental - variable - properties: - defaultValue: - description: |- - When the environment variable is not found, - the tag's value will be populated with this default value if specified, - otherwise the tag will not be populated. - type: string - name: - description: Name of the environment - variable used to populate the tag's - value - type: string - type: object - header: - description: |- - The custom tag's value is populated by an http header from - an incoming request. - properties: - defaultValue: - description: |- - Default value to be used for the tag when the named HTTP header does not exist. - The tag will be skipped if no default value is provided. - type: string - name: - description: HTTP header name used to - obtain the value from to populate - the tag value. - type: string - type: object - literal: - description: The custom tag's value is the - specified literal. - properties: - value: - description: Static literal value used - to populate the tag value. - type: string - type: object - type: object - x-kubernetes-validations: - - message: At most one of [literal environment - header] should be set - rule: (has(self.literal)?1:0) + (has(self.environment)?1:0) - + (has(self.header)?1:0) <= 1 - description: "and gateways).\nThe key represents - the name of the tag.\nEx:\n```yaml\ncustom_tags:\n\n\tnew_tag_name:\n\t - \ header:\n\t name: custom-http-header-name\n\t - \ default_value: defaulted-value-from-custom-header\n\n```" - type: object - datadog: - description: Use a Datadog tracer. - properties: - address: - description: Address of the Datadog Agent. - type: string - type: object - lightstep: - description: |- - Use a Lightstep tracer. - NOTE: For Istio 1.15+, this configuration option will result - in using OpenTelemetry-based Lightstep integration. - properties: - accessToken: - description: The Lightstep access token. - type: string - address: - description: Address of the Lightstep Satellite - pool. - type: string - type: object - maxPathTagLength: - description: |- - Configures the maximum length of the request path to extract and include in the - HttpUrl tag. Used to truncate length request paths to meet the needs of tracing - backend. If not set, then a length of 256 will be used. - format: int32 - type: integer - openCensusAgent: - description: Use an OpenCensus tracer exporting - to an OpenCensus agent. - properties: - address: - description: |- - gRPC address for the OpenCensus agent (e.g. dns://authority/host:port or - unix:path). See [gRPC naming - docs](https://github.com/grpc/grpc/blob/master/doc/naming.md) for - details. - type: string - context: - description: |- - Specifies the set of context propagation headers used for distributed - tracing. Default is `["W3C_TRACE_CONTEXT"]`. If multiple values are specified, - the proxy will attempt to read each header for each request and will - write all headers. - items: - description: |- - TraceContext selects the context propagation headers used for - distributed tracing. - enum: - - UNSPECIFIED - - W3C_TRACE_CONTEXT - - GRPC_BIN - - CLOUD_TRACE_CONTEXT - - B3 - type: string - type: array - type: object - sampling: - description: |- - The percentage of requests (0.0 - 100.0) that will be randomly selected for trace generation, - if not requested by the client or not forced. Default is 1.0. - type: number - stackdriver: - description: Use a Stackdriver tracer. - properties: - debug: - description: debug enables trace output to - stdout. - type: boolean - maxNumberOfAnnotations: - description: |- - The global default max number of annotation events per span. - default is 200. - format: int64 - type: integer - maxNumberOfAttributes: - description: |- - The global default max number of attributes per span. - default is 200. - format: int64 - type: integer - maxNumberOfMessageEvents: - description: |- - The global default max number of message events per span. - default is 200. - format: int64 - type: integer - type: object - tlsSettings: - description: |- - Use the tlsSettings to specify the tls mode to use. If the remote tracing service - uses Istio mutual TLS and shares the root CA with Pilot, specify the TLS - mode as `ISTIO_MUTUAL`. - properties: - caCertificates: - description: |- - OPTIONAL: The path to the file containing certificate authority - certificates to use in verifying a presented server certificate. If - omitted, the proxy will verify the server's certificate using - the OS CA certificates. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - caCrl: - description: |- - OPTIONAL: The path to the file containing the certificate revocation list (CRL) - to use in verifying a presented server certificate. `CRL` is a list of certificates - that have been revoked by the CA (Certificate Authority) before their scheduled expiration date. - If specified, the proxy will verify if the presented certificate is part of the revoked list of certificates. - If omitted, the proxy will not verify the certificate against the `crl`. Note that if `credentialName` is set, - `CRL` cannot be specified using `caCrl`, rather it has to be specified inside the credential. - type: string - clientCertificate: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client-side TLS certificate to use. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - credentialName: - description: |- - The name of the secret that holds the TLS certs for the - client including the CA certificates. This secret must exist in - the namespace of the proxy using the certificates. - An Opaque secret should contain the following keys and values: - `key: `, `cert: `, `cacert: `, - `crl: ` - Here CACertificate is used to verify the server certificate. - For mutual TLS, `cacert: ` can be provided in the - same secret or a separate secret named `-cacert`. - A TLS secret for client certificates with an additional - `ca.crt` key for CA certificates and `ca.crl` key for - certificate revocation list(CRL) is also supported. - Only one of client certificates and CA certificate - or credentialName can be specified. - - **NOTE:** This field is applicable at sidecars only if - `DestinationRule` has a `workloadSelector` specified. - Otherwise the field will be applicable only at gateways, and - sidecars will continue to use the certificate paths. - type: string - insecureSkipVerify: - description: |- - `insecureSkipVerify` specifies whether the proxy should skip verifying the - CA signature and SAN for the server certificate corresponding to the host. - The default value of this field is false. - type: boolean - mode: - description: |- - Indicates whether connections to this port should be secured - using TLS. The value of this field determines how TLS is enforced. - enum: - - DISABLE - - SIMPLE - - MUTUAL - - ISTIO_MUTUAL - type: string - privateKey: - description: |- - REQUIRED if mode is `MUTUAL`. The path to the file holding the - client's private key. - Should be empty if mode is `ISTIO_MUTUAL`. - type: string - sni: - description: |- - SNI string to present to the server during TLS handshake. - If unspecified, SNI will be automatically set based on downstream HTTP - host/authority header for SIMPLE and MUTUAL TLS modes. - type: string - subjectAltNames: - description: |- - A list of alternate names to verify the subject identity in the - certificate. If specified, the proxy will verify that the server - certificate's subject alt name matches one of the specified values. - If specified, this list overrides the value of subject_alt_names - from the ServiceEntry. If unspecified, automatic validation of upstream - presented certificate for new upstream connections will be done based on the - downstream HTTP host/authority header. - items: - type: string - type: array - type: object - zipkin: - description: Use a Zipkin tracer. - properties: - address: - description: Address of the Zipkin service - (e.g. _zipkin:9411_). - type: string - type: object - type: object - x-kubernetes-validations: - - message: At most one of [zipkin lightstep datadog - stackdriver openCensusAgent] should be set - rule: (has(self.zipkin)?1:0) + (has(self.lightstep)?1:0) - + (has(self.datadog)?1:0) + (has(self.stackdriver)?1:0) - + (has(self.openCensusAgent)?1:0) <= 1 - tracingServiceName: - description: |- - Used by Envoy proxies to assign the values for the service names in trace - spans. - enum: - - APP_LABEL_AND_NAMESPACE - - CANONICAL_NAME_ONLY - - CANONICAL_NAME_AND_NAMESPACE - type: string - zipkinAddress: - description: |- - Address of the Zipkin service (e.g. _zipkin:9411_). - DEPRECATED: Use [tracing][istio.mesh.v1alpha1.ProxyConfig.tracing] instead. - - Deprecated: Marked as deprecated in mesh/v1alpha1/proxy.proto. - type: string - type: object - x-kubernetes-validations: - - message: At most one of [serviceCluster tracingServiceName] - should be set - rule: (has(self.serviceCluster)?1:0) + (has(self.tracingServiceName)?1:0) - <= 1 - defaultDestinationRuleExportTo: - description: |- - The default value for the `DestinationRule.exportTo` field. Has the same - syntax as `defaultServiceExportTo`. - - If not set the system will use "*" as the default value which implies that - destination rules are exported to all namespaces - items: - type: string - type: array - defaultHttpRetryPolicy: - description: "Configure the default HTTP retry policy.\nThe - default number of retry attempts is set at 2 for these - errors:\n\n\t\"connect-failure,refused-stream,unavailable,cancelled,retriable-status-codes\".\n\nSetting - the number of attempts to 0 disables retry policy globally.\nThis - setting can be overridden on a per-host basis using - the Virtual Service\nAPI.\nAll settings in the retry - policy except `perTryTimeout` can currently be\nconfigured - globally via this field." - properties: - attempts: - description: |- - Number of retries to be allowed for a given request. The interval - between retries will be determined automatically (25ms+). When request - `timeout` of the [HTTP route](https://istio.io/docs/reference/config/networking/virtual-service/#HTTPRoute) - or `per_try_timeout` is configured, the actual number of retries attempted also depends on - the specified request `timeout` and `per_try_timeout` values. MUST BE >= 0. If `0`, retries will be disabled. - The maximum possible number of requests made will be 1 + `attempts`. - format: int32 - type: integer - perTryTimeout: - description: |- - Timeout per attempt for a given request, including the initial call and any retries. Format: 1h/1m/1s/1ms. MUST BE >=1ms. - Default is same value as request - `timeout` of the [HTTP route](https://istio.io/docs/reference/config/networking/virtual-service/#HTTPRoute), - which means no timeout. - type: string - retryOn: - description: |- - Specifies the conditions under which retry takes place. - One or more policies can be specified using a ‘,’ delimited list. - See the [retry policies](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#x-envoy-retry-on) - and [gRPC retry policies](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#x-envoy-retry-grpc-on) for more details. - - In addition to the policies specified above, a list of HTTP status codes can be passed, such as `retryOn: "503,reset"`. - Note these status codes refer to the actual responses received from the destination. - For example, if a connection is reset, Istio will translate this to 503 for it's response. - However, the destination did not return a 503 error, so this would not match `"503"` (it would, however, match `"reset"`). - - If not specified, this defaults to `connect-failure,refused-stream,unavailable,cancelled,503`. - type: string - retryRemoteLocalities: - description: |- - Flag to specify whether the retries should retry to other localities. - See the [retry plugin configuration](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http_connection_management#retry-plugin-configuration) for more details. - type: boolean - type: object - defaultProviders: - description: Specifies extension providers to use by default - in Istio configuration resources. - properties: - accessLogging: - description: Name of the default provider(s) for access - logging. - items: - type: string - type: array - metrics: - description: Name of the default provider(s) for metrics. - items: - type: string - type: array - tracing: - description: Name of the default provider(s) for tracing. - items: - type: string - type: array - type: object - defaultServiceExportTo: - description: |- - The default value for the ServiceEntry.exportTo field and services - imported through container registry integrations, e.g. this applies to - Kubernetes Service resources. The value is a list of namespace names and - reserved namespace aliases. The allowed namespace aliases are: - ``` - * - All Namespaces - . - Current Namespace - ~ - No Namespace - ``` - If not set the system will use "*" as the default value which implies that - services are exported to all namespaces. - - `All namespaces` is a reasonable default for implementations that don't - need to restrict access or visibility of services across namespace - boundaries. If that requirement is present it is generally good practice to - make the default `Current namespace` so that services are only visible - within their own namespaces by default. Operators can then expand the - visibility of services to other namespaces as needed. Use of `No Namespace` - is expected to be rare but can have utility for deployments where - dependency management needs to be precise even within the scope of a single - namespace. - - For further discussion see the reference documentation for `ServiceEntry`, - `Sidecar`, and `Gateway`. - items: - type: string - type: array - defaultVirtualServiceExportTo: - description: |- - The default value for the VirtualService.exportTo field. Has the same - syntax as `defaultServiceExportTo`. - - If not set the system will use "*" as the default value which implies that - virtual services are exported to all namespaces - items: - type: string - type: array - disableEnvoyListenerLog: - description: |- - This flag disables Envoy Listener logs. - See [Listener Access Log](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/listener/v3/listener.proto#envoy-v3-api-field-config-listener-v3-listener-access-log) - Istio Enables Envoy's listener access logs on "NoRoute" response flag. - Default value is `false`. - type: boolean - discoverySelectors: - description: |- - A list of Kubernetes selectors that specify the set of namespaces that Istio considers when - computing configuration updates for sidecars. This can be used to reduce Istio's computational load - by limiting the number of entities (including services, pods, and endpoints) that are watched and processed. - If omitted, Istio will use the default behavior of processing all namespaces in the cluster. - Elements in the list are disjunctive (OR semantics), i.e. a namespace will be included if it matches any selector. - The following example selects any namespace that matches either below: - 1. The namespace has both of these labels: `env: prod` and `region: us-east1` - 2. The namespace has label `app` equal to `cassandra` or `spark`. - ```yaml - discoverySelectors: - - matchLabels: - env: prod - region: us-east1 - - matchExpressions: - - key: app - operator: In - values: - - cassandra - - spark - - ``` - Refer to the [Kubernetes selector docs](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors) - for additional detail on selector semantics. - items: - description: |- - A label selector is a label query over a set of resources. The result of matchLabels and - matchExpressions are ANDed. An empty label selector matches all objects. A null - label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label - selector requirements. The requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that the - selector applies to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - type: array - dnsRefreshRate: - description: |- - Configures DNS refresh rate for Envoy clusters of type `STRICT_DNS` - Default refresh rate is `60s`. - type: string - enableAutoMtls: - description: |- - This flag is used to enable mutual `TLS` automatically for service to service communication - within the mesh, default true. - If set to true, and a given service does not have a corresponding `DestinationRule` configured, - or its `DestinationRule` does not have ClientTLSSettings specified, Istio configures client side - TLS configuration appropriately. More specifically, - If the upstream authentication policy is in `STRICT` mode, use Istio provisioned certificate - for mutual `TLS` to connect to upstream. - If upstream service is in plain text mode, use plain text. - If the upstream authentication policy is in PERMISSIVE mode, Istio configures clients to use - mutual `TLS` when server sides are capable of accepting mutual `TLS` traffic. - If service `DestinationRule` exists and has `ClientTLSSettings` specified, that is always used instead. - type: boolean - enableEnvoyAccessLogService: - description: |- - This flag enables Envoy's gRPC Access Log Service. - See [Access Log Service](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/access_loggers/grpc/v3/als.proto) - for details about Envoy's gRPC Access Log Service API. - Default value is `false`. - type: boolean - enablePrometheusMerge: - description: |- - If enabled, Istio agent will merge metrics exposed by the application with metrics from Envoy - and Istio agent. The sidecar injection will replace `prometheus.io` annotations present on the pod - and redirect them towards Istio agent, which will then merge metrics of from the application with Istio metrics. - This relies on the annotations `prometheus.io/scrape`, `prometheus.io/port`, and - `prometheus.io/path` annotations. - If you are running a separately managed Envoy with an Istio sidecar, this may cause issues, as the metrics will collide. - In this case, it is recommended to disable aggregation on that deployment with the - `prometheus.istio.io/merge-metrics: "false"` annotation. - If not specified, this will be enabled by default. - type: boolean - enableTracing: - description: |- - Flag to control generation of trace spans and request IDs. - Requires a trace span collector defined in the proxy configuration. - type: boolean - extensionProviders: - description: |- - Defines a list of extension providers that extend Istio's functionality. For example, the AuthorizationPolicy - can be used with an extension provider to delegate the authorization decision to a custom authorization system. - items: - properties: - datadog: - description: Configures a Datadog tracing provider. - properties: - maxTagLength: - description: |- - Optional. Controls the overall path length allowed in a reported span. - NOTE: currently only controls max length of the path tag. - format: int32 - type: integer - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service for the Datadog agent. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "datadog.default.svc.cluster.local" or "bar/datadog.example.com". - type: string - required: - - port - - service - type: object - envoyExtAuthzGrpc: - description: Configures an external authorizer that - implements the Envoy ext_authz filter authorization - check service using the gRPC API. - properties: - failOpen: - description: |- - If true, the HTTP request or TCP connection will be allowed even if the communication with the authorization service has failed, - or if the authorization service has returned a HTTP 5xx error. - Default is false. For HTTP request, it will be rejected with 403 (HTTP Forbidden). For TCP connection, it will be closed immediately. - type: boolean - includeRequestBodyInCheck: - description: If set, the client request body - will be included in the authorization request - sent to the authorization service. - properties: - allowPartialMessage: - description: |- - When this field is true, ext-authz filter will buffer the message until maxRequestBytes is reached. - The authorization request will be dispatched and no 413 HTTP error will be returned by the filter. - A "x-envoy-auth-partial-body: false|true" metadata header will be added to the authorization request message - indicating if the body data is partial. - type: boolean - maxRequestBytes: - description: |- - Sets the maximum size of a message body that the ext-authz filter will hold in memory. - If maxRequestBytes is reached, and allowPartialMessage is false, Envoy will return a 413 (Payload Too Large). - Otherwise the request will be sent to the provider with a partial message. - Note that this setting will have precedence over the failOpen field, the 413 will be returned even when the - failOpen is set to true. - format: int32 - type: integer - packAsBytes: - description: |- - If true, the body sent to the external authorization service in the gRPC authorization request is set with raw bytes - in the [raw_body field](https://github.com/envoyproxy/envoy/blame/cffb095d59d7935abda12b9509bcd136808367bb/api/envoy/service/auth/v3/attribute_context.proto#L153). - Otherwise, it will be filled with UTF-8 string in the [body field](https://github.com/envoyproxy/envoy/blame/cffb095d59d7935abda12b9509bcd136808367bb/api/envoy/service/auth/v3/attribute_context.proto#L147). - This field only works with the envoyExtAuthzGrpc provider and has no effect for the envoyExtAuthzHttp provider. - type: boolean - type: object - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service that implements the Envoy ext_authz gRPC authorization service. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "my-ext-authz.foo.svc.cluster.local" or "bar/my-ext-authz.example.com". - type: string - statusOnError: - description: |- - Sets the HTTP status that is returned to the client when there is a network error to the authorization service. - The default status is "403" (HTTP Forbidden). - type: string - timeout: - description: |- - The maximum duration that the proxy will wait for a response from the provider, this is the timeout for a specific request (default timeout: 600s). - When this timeout condition is met, the proxy marks the communication to the authorization service as failure. - In this situation, the response sent back to the client will depend on the configured `failOpen` field. - type: string - required: - - port - - service - type: object - envoyExtAuthzHttp: - description: Configures an external authorizer that - implements the Envoy ext_authz filter authorization - check service using the HTTP API. - properties: - failOpen: - description: |- - If true, the user request will be allowed even if the communication with the authorization service has failed, - or if the authorization service has returned a HTTP 5xx error. - Default is false and the request will be rejected with "Forbidden" response. - type: boolean - headersToDownstreamOnAllow: - description: |- - List of headers from the authorization service that should be forwarded to downstream when the authorization - check result is allowed (HTTP code 200). - If not specified, the original response will not be modified and forwarded to downstream as-is. - Note, any existing headers will be overridden. - - Exact, prefix and suffix matches are supported (similar to the - [authorization policy rule syntax](https://istio.io/latest/docs/reference/config/security/authorization-policy/#Rule) - except the presence match): - - Exact match: "abc" will match on value "abc". - - Prefix match: "abc*" will match on value "abc" and "abcd". - - Suffix match: "*abc" will match on value "abc" and "xabc". - items: - type: string - type: array - headersToDownstreamOnDeny: - description: |- - List of headers from the authorization service that should be forwarded to downstream when the authorization - check result is not allowed (HTTP code other than 200). - If not specified, all the authorization response headers, except *Authority (Host)* will be in the response to - the downstream. - When a header is included in this list, *Path*, *Status*, *Content-Length*, *WWWAuthenticate* and *Location* are - automatically added. - Note, the body from the authorization service is always included in the response to downstream. - - Exact, prefix and suffix matches are supported (similar to the - [authorization policy rule syntax](https://istio.io/latest/docs/reference/config/security/authorization-policy/#Rule) - except the presence match): - - Exact match: "abc" will match on value "abc". - - Prefix match: "abc*" will match on value "abc" and "abcd". - - Suffix match: "*abc" will match on value "abc" and "xabc". - items: - type: string - type: array - headersToUpstreamOnAllow: - description: |- - List of headers from the authorization service that should be added or overridden in the original request and - forwarded to the upstream when the authorization check result is allowed (HTTP code 200). - If not specified, the original request will not be modified and forwarded to backend as-is. - Note, any existing headers will be overridden. - - Exact, prefix and suffix matches are supported (similar to the - [authorization policy rule syntax](https://istio.io/latest/docs/reference/config/security/authorization-policy/#Rule) - except the presence match): - - Exact match: "abc" will match on value "abc". - - Prefix match: "abc*" will match on value "abc" and "abcd". - - Suffix match: "*abc" will match on value "abc" and "xabc". - items: - type: string - type: array - includeAdditionalHeadersInCheck: - additionalProperties: - type: string - description: |- - Set of additional fixed headers that should be included in the authorization request sent to the authorization service. - Key is the header name and value is the header value. - Note that client request of the same key or headers specified in includeRequestHeadersInCheck will be overridden. - type: object - includeHeadersInCheck: - description: |- - DEPRECATED. Use includeRequestHeadersInCheck instead. - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - items: - type: string - type: array - includeRequestBodyInCheck: - description: If set, the client request body - will be included in the authorization request - sent to the authorization service. - properties: - allowPartialMessage: - description: |- - When this field is true, ext-authz filter will buffer the message until maxRequestBytes is reached. - The authorization request will be dispatched and no 413 HTTP error will be returned by the filter. - A "x-envoy-auth-partial-body: false|true" metadata header will be added to the authorization request message - indicating if the body data is partial. - type: boolean - maxRequestBytes: - description: |- - Sets the maximum size of a message body that the ext-authz filter will hold in memory. - If maxRequestBytes is reached, and allowPartialMessage is false, Envoy will return a 413 (Payload Too Large). - Otherwise the request will be sent to the provider with a partial message. - Note that this setting will have precedence over the failOpen field, the 413 will be returned even when the - failOpen is set to true. - format: int32 - type: integer - packAsBytes: - description: |- - If true, the body sent to the external authorization service in the gRPC authorization request is set with raw bytes - in the [raw_body field](https://github.com/envoyproxy/envoy/blame/cffb095d59d7935abda12b9509bcd136808367bb/api/envoy/service/auth/v3/attribute_context.proto#L153). - Otherwise, it will be filled with UTF-8 string in the [body field](https://github.com/envoyproxy/envoy/blame/cffb095d59d7935abda12b9509bcd136808367bb/api/envoy/service/auth/v3/attribute_context.proto#L147). - This field only works with the envoyExtAuthzGrpc provider and has no effect for the envoyExtAuthzHttp provider. - type: boolean - type: object - includeRequestHeadersInCheck: - description: |- - List of client request headers that should be included in the authorization request sent to the authorization service. - Note that in addition to the headers specified here following headers are included by default: - 1. *Host*, *Method*, *Path* and *Content-Length* are automatically sent. - 2. *Content-Length* will be set to 0 and the request will not have a message body. However, the authorization - request can include the buffered client request body (controlled by includeRequestBodyInCheck setting), - consequently the value of Content-Length of the authorization request reflects the size of its payload size. - - Exact, prefix and suffix matches are supported (similar to the - [authorization policy rule syntax](https://istio.io/latest/docs/reference/config/security/authorization-policy/#Rule) - except the presence match): - - Exact match: "abc" will match on value "abc". - - Prefix match: "abc*" will match on value "abc" and "abcd". - - Suffix match: "*abc" will match on value "abc" and "xabc". - items: - type: string - type: array - pathPrefix: - description: |- - Sets a prefix to the value of authorization request header *Path*. - For example, setting this to "/check" for an original user request at path "/admin" will cause the - authorization check request to be sent to the authorization service at the path "/check/admin" instead of "/admin". - type: string - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service that implements the Envoy ext_authz HTTP authorization service. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "my-ext-authz.foo.svc.cluster.local" or "bar/my-ext-authz.example.com". - type: string - statusOnError: - description: |- - Sets the HTTP status that is returned to the client when there is a network error to the authorization service. - The default status is "403" (HTTP Forbidden). - type: string - timeout: - description: |- - The maximum duration that the proxy will wait for a response from the provider (default timeout: 600s). - When this timeout condition is met, the proxy marks the communication to the authorization service as failure. - In this situation, the response sent back to the client will depend on the configured `failOpen` field. - type: string - required: - - port - - service - type: object - envoyFileAccessLog: - description: Configures an Envoy File Access Log - provider. - properties: - logFormat: - description: Optional. Allows overriding of - the default access log format. - properties: - labels: - additionalProperties: - type: string - description: "JSON structured format for - the envoy access logs. Envoy [command - operators](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators)\ncan - be used as values for fields within the - Struct. Values are rendered\nas strings, - numbers, or boolean values, as appropriate\n(see: - [format dictionaries](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#config-access-log-format-dictionaries)). - Nested JSON is\nsupported for some command - operators (e.g. `FILTER_STATE` or `DYNAMIC_METADATA`).\nUse - `labels: {}` for default envoy JSON log - format.\n\nExample:\n```\nlabels:\n\n\tstatus: - \"%RESPONSE_CODE%\"\n\tmessage: \"%LOCAL_REPLY_BODY%\"\n\n```" - type: object - text: - description: |- - Textual format for the envoy access logs. Envoy [command operators](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators) may be - used in the format. The [format string documentation](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#config-access-log-format-strings) - provides more information. - - NOTE: Istio will insert a newline ('\n') on all formats (if missing). - - Example: `text: "%LOCAL_REPLY_BODY%:%RESPONSE_CODE%:path=%REQ(:path)%"` - type: string - type: object - x-kubernetes-validations: - - message: At most one of [text labels] should - be set - rule: (has(self.text)?1:0) + (has(self.labels)?1:0) - <= 1 - path: - description: |- - Path to a local file to write the access log entries. - This may be used to write to streams, via `/dev/stderr` and `/dev/stdout` - If unspecified, defaults to `/dev/stdout`. - type: string - type: object - envoyHttpAls: - description: Configures an Envoy Access Logging - Service provider for HTTP traffic. - properties: - additionalRequestHeadersToLog: - description: Optional. Additional request headers - to log. - items: - type: string - type: array - additionalResponseHeadersToLog: - description: Optional. Additional response headers - to log. - items: - type: string - type: array - additionalResponseTrailersToLog: - description: Optional. Additional response trailers - to log. - items: - type: string - type: array - filterStateObjectsToLog: - description: Optional. Additional filter state - objects to log. - items: - type: string - type: array - logName: - description: |- - Optional. The friendly name of the access log. - Defaults: - - "http_envoy_accesslog" - - "listener_envoy_accesslog" - type: string - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service that implements the Envoy ALS gRPC authorization service. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "envoy-als.foo.svc.cluster.local" or "bar/envoy-als.example.com". - type: string - required: - - port - - service - type: object - envoyOtelAls: - description: Configures an Envoy Open Telemetry - Access Logging Service provider. - properties: - logFormat: - description: |- - Optional. Format for the proxy access log - Empty value results in proxy's default access log format, following Envoy access logging formatting. - properties: - labels: - additionalProperties: - type: string - description: "Optional. Additional attributes - that describe the specific event occurrence.\nStructured - format for the envoy access logs. Envoy - [command operators](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators)\ncan - be used as values for fields within the - Struct. Values are rendered\nas strings, - numbers, or boolean values, as appropriate\n(see: - [format dictionaries](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#config-access-log-format-dictionaries)). - Nested JSON is\nsupported for some command - operators (e.g. FILTER_STATE or DYNAMIC_METADATA).\nAlias - to `attributes` field in [Open Telemetry](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/access_loggers/open_telemetry/v3/logs_service.proto)\n\nExample:\n```\nlabels:\n\n\tstatus: - \"%RESPONSE_CODE%\"\n\tmessage: \"%LOCAL_REPLY_BODY%\"\n\n```" - type: object - text: - description: |- - Textual format for the envoy access logs. Envoy [command operators](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators) may be - used in the format. The [format string documentation](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#config-access-log-format-strings) - provides more information. - Alias to `body` field in [Open Telemetry](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/access_loggers/open_telemetry/v3/logs_service.proto) - Example: `text: "%LOCAL_REPLY_BODY%:%RESPONSE_CODE%:path=%REQ(:path)%"` - type: string - type: object - logName: - description: |- - Optional. The friendly name of the access log. - Defaults: - - "otel_envoy_accesslog" - type: string - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service that implements the Envoy ALS gRPC authorization service. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "envoy-als.foo.svc.cluster.local" or "bar/envoy-als.example.com". - type: string - required: - - port - - service - type: object - envoyTcpAls: - description: Configures an Envoy Access Logging - Service provider for TCP traffic. - properties: - filterStateObjectsToLog: - description: Optional. Additional filter state - objects to log. - items: - type: string - type: array - logName: - description: |- - Optional. The friendly name of the access log. - Defaults: - - "tcp_envoy_accesslog" - - "listener_envoy_accesslog" - type: string - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service that implements the Envoy ALS gRPC authorization service. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "envoy-als.foo.svc.cluster.local" or "bar/envoy-als.example.com". - type: string - required: - - port - - service - type: object - lightstep: - description: |- - Configures a Lightstep tracing provider. - Deprecated: For Istio 1.15+, please use an OpenTelemetryTracingProvider instead, more details can be found at https://github.com/istio/istio/issues/40027 - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - properties: - accessToken: - description: The Lightstep access token. - type: string - maxTagLength: - description: |- - Optional. Controls the overall path length allowed in a reported span. - NOTE: currently only controls max length of the path tag. - format: int32 - type: integer - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service for the Lightstep collector. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "lightstep.default.svc.cluster.local" or "bar/lightstep.example.com". - type: string - required: - - port - - service - type: object - name: - description: REQUIRED. A unique name identifying - the extension provider. - type: string - opencensus: - description: |- - Configures an OpenCensusAgent tracing provider. - Deprecated: OpenCensus is deprecated, more details can be found at https://opentelemetry.io/blog/2023/sunsetting-opencensus/ - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - properties: - context: - description: |- - Specifies the set of context propagation headers used for distributed - tracing. Default is `["W3C_TRACE_CONTEXT"]`. If multiple values are specified, - the proxy will attempt to read each header for each request and will - write all headers. - items: - description: |- - TraceContext selects the context propagation headers used for - distributed tracing. - enum: - - UNSPECIFIED - - W3C_TRACE_CONTEXT - - GRPC_BIN - - CLOUD_TRACE_CONTEXT - - B3 - type: string - type: array - maxTagLength: - description: |- - Optional. Controls the overall path length allowed in a reported span. - NOTE: currently only controls max length of the path tag. - format: int32 - type: integer - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service for the OpenCensusAgent. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "ocagent.default.svc.cluster.local" or "bar/ocagent.example.com". - type: string - required: - - port - - service - type: object - opentelemetry: - description: Configures an OpenTelemetry tracing - provider. - properties: - dynatraceSampler: - description: |- - The Dynatrace adaptive traffic management (ATM) sampler. - - Example configuration: - - ```yaml - - name: otel-tracing - opentelemetry: - port: 443 - service: "{your-environment-id}.live.dynatrace.com" - http: - path: "/api/v2/otlp/v1/traces" - timeout: 10s - headers: - - name: "Authorization" - value: "Api-Token dt0c01." - resourceDetectors: - dynatrace: {} - dynatraceSampler: - tenant: "{your-environment-id}" - clusterId: 1234 - properties: - clusterId: - description: |- - REQUIRED. The identifier of the cluster in the Dynatrace platform. - The cluster here is Dynatrace-specific concept and not related to the cluster concept in Istio/Envoy. - - The value can be obtained from the Istio deployment page in Dynatrace. - format: int32 - type: integer - httpService: - description: |- - Optional. Dynatrace HTTP API to obtain sampling configuration. - - When not provided, the Dynatrace Sampler will re-use the configuration from the OpenTelemetryTracingProvider HTTP Exporter - (`service`, `port` and `http`), including the access token. - properties: - http: - description: REQUIRED. Specifies sampling - configuration URI. - properties: - headers: - description: |- - Optional. Allows specifying custom HTTP headers that will be added - to each HTTP request sent. - items: - properties: - name: - description: REQUIRED. The - HTTP header name. - type: string - value: - description: REQUIRED. The - HTTP header value. - type: string - required: - - name - - value - type: object - type: array - path: - description: REQUIRED. Specifies - the path on the service. - type: string - timeout: - description: |- - Optional. Specifies the timeout for the HTTP request. - If not specified, the default is 3s. - type: string - required: - - path - type: object - port: - description: REQUIRED. Specifies the - port of the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the Dynatrace environment to obtain the sampling configuration. - The format is ``, where `` is the fully qualified Dynatrace environment - host name defined in the ServiceEntry. - - Example: "{your-environment-id}.live.dynatrace.com". - type: string - required: - - http - - port - - service - type: object - rootSpansPerMinute: - description: |- - Optional. Number of sampled spans per minute to be used - when the adaptive value cannot be obtained from the Dynatrace API. - - A default value of `1000` is used when: - - - `rootSpansPerMinute` is unset - - `rootSpansPerMinute` is set to 0 - format: int32 - type: integer - tenant: - description: |- - REQUIRED. The Dynatrace customer's tenant identifier. - - The value can be obtained from the Istio deployment page in Dynatrace. - type: string - required: - - clusterId - - tenant - type: object - grpc: - description: "Optional. Specifies the configuration - for exporting OTLP traces via GRPC.\nWhen - empty, traces will check whether HTTP is set.\nIf - not, traces will use default GRPC configurations.\n\nThe - following example shows how to configure the - OpenTelemetry ExtensionProvider to export - via GRPC:\n\n1. Add/change the OpenTelemetry - extension provider in `MeshConfig`\n```yaml\n - \ - name: opentelemetry\n opentelemetry:\n - \ port: 8090\n service: tracing.example.com\n - \ grpc:\n timeout: 10s\n initialMetadata:\n - \ - name: \"Authentication\"\n value: \"token-xxxxx\"\n\n```\n\n2. - Deploy a `ServiceEntry` for the observability - back-end\n```yaml\napiVersion: networking.istio.io/v1alpha3\nkind: - ServiceEntry\nmetadata:\n\n\tname: tracing-grpc\n\nspec:\n\n\thosts:\n\t- - tracing.example.com\n\tports:\n\t- number: - 8090\n\t name: grpc-port\n\t protocol: GRPC\n\tresolution: - DNS\n\tlocation: MESH_EXTERNAL\n\n```" - properties: - initialMetadata: - description: |- - Optional. Additional metadata to include in streams initiated to the GrpcService. This can be used for - scenarios in which additional ad hoc authorization headers (e.g. “x-foo-bar: baz-key“) are to - be injected. - items: - properties: - name: - description: REQUIRED. The HTTP header - name. - type: string - value: - description: REQUIRED. The HTTP header - value. - type: string - required: - - name - - value - type: object - type: array - timeout: - description: Optional. Specifies the timeout - for the GRPC request. - type: string - type: object - http: - description: "Optional. Specifies the configuration - for exporting OTLP traces via HTTP.\nWhen - empty, traces will be exported via gRPC.\n\nThe - following example shows how to configure the - OpenTelemetry ExtensionProvider to export - via HTTP:\n\n1. Add/change the OpenTelemetry - extension provider in `MeshConfig`\n```yaml\n - \ - name: otel-tracing\n opentelemetry:\n - \ port: 443\n service: my.olly-backend.com\n - \ http:\n path: \"/api/otlp/traces\"\n - \ timeout: 10s\n headers:\n - name: - \"my-custom-header\"\n value: \"some value\"\n\n```\n\n2. - Deploy a `ServiceEntry` for the observability - back-end\n```yaml\napiVersion: networking.istio.io/v1alpha3\nkind: - ServiceEntry\nmetadata:\n\n\tname: my-olly-backend\n\nspec:\n\n\thosts:\n\t- - my.olly-backend.com\n\tports:\n\t- number: - 443\n\t name: https-port\n\t protocol: HTTPS\n\tresolution: - DNS\n\tlocation: MESH_EXTERNAL\n\n---\napiVersion: - networking.istio.io/v1alpha3\nkind: DestinationRule\nmetadata:\n\n\tname: - my-olly-backend\n\nspec:\n\n\thost: my.olly-backend.com\n\ttrafficPolicy:\n\t - \ portLevelSettings:\n\t - port:\n\t number: - 443\n\t tls:\n\t mode: SIMPLE\n\n```" - properties: - headers: - description: |- - Optional. Allows specifying custom HTTP headers that will be added - to each HTTP request sent. - items: - properties: - name: - description: REQUIRED. The HTTP header - name. - type: string - value: - description: REQUIRED. The HTTP header - value. - type: string - required: - - name - - value - type: object - type: array - path: - description: REQUIRED. Specifies the path - on the service. - type: string - timeout: - description: |- - Optional. Specifies the timeout for the HTTP request. - If not specified, the default is 3s. - type: string - required: - - path - type: object - maxTagLength: - description: |- - Optional. Controls the overall path length allowed in a reported span. - NOTE: currently only controls max length of the path tag. - format: int32 - type: integer - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - resourceDetectors: - description: |- - Optional. Specifies [Resource Detectors](https://opentelemetry.io/docs/specs/otel/resource/sdk/) - to be used by the OpenTelemetry Tracer. When multiple resources are provided, they are merged - according to the OpenTelemetry [Resource specification](https://opentelemetry.io/docs/specs/otel/resource/sdk/#merge). - - The following example shows how to configure the Environment Resource Detector, that will - read the attributes from the environment variable `OTEL_RESOURCE_ATTRIBUTES`: - - ```yaml - - name: otel-tracing - opentelemetry: - port: 443 - service: my.olly-backend.com - resourceDetectors: - environment: {} - - ``` - properties: - dynatrace: - description: |- - Dynatrace Resource Detector. - The resource detector reads from the Dynatrace enrichment files - and adds host/process related attributes to the OpenTelemetry resource. - - See: [Enrich ingested data with Dynatrace-specific dimensions](https://docs.dynatrace.com/docs/shortlink/enrichment-files) - type: object - environment: - description: |- - OpenTelemetry Environment Resource Detector. - The resource detector reads attributes from the environment variable `OTEL_RESOURCE_ATTRIBUTES` - and adds them to the OpenTelemetry resource. - - See: [Resource specification](https://opentelemetry.io/docs/specs/otel/resource/sdk/#specifying-resource-information-via-an-environment-variable) - type: object - type: object - service: - description: |- - REQUIRED. Specifies the OpenTelemetry endpoint that will receive OTLP traces. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "otlp.default.svc.cluster.local" or "bar/otlp.example.com". - type: string - required: - - port - - service - type: object - x-kubernetes-validations: - - message: At most one of [dynatraceSampler] should - be set - rule: (has(self.dynatraceSampler)?1:0) <= 1 - prometheus: - description: Configures a Prometheus metrics provider. - type: object - skywalking: - description: Configures a Apache SkyWalking provider. - properties: - accessToken: - description: Optional. The SkyWalking OAP access - token. - type: string - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service for the SkyWalking receiver. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "skywalking.default.svc.cluster.local" or "bar/skywalking.example.com". - type: string - required: - - port - - service - type: object - stackdriver: - description: Configures a Stackdriver provider. - properties: - debug: - description: |- - debug enables trace output to stdout. - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - type: boolean - logging: - description: Optional. Controls Stackdriver - logging behavior. - properties: - labels: - additionalProperties: - type: string - description: "Collection of tag names and - tag expressions to include in the log\nentry. - Conflicts are resolved by the tag name - by overriding previously\nsupplied values.\n\nExample:\n\n\tlabels:\n\t - \ path: request.url_path\n\t foo: request.headers['x-foo']" - type: object - type: object - maxNumberOfAnnotations: - description: |- - The global default max number of annotation events per span. - default is 200. - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - format: int64 - type: integer - maxNumberOfAttributes: - description: |- - The global default max number of attributes per span. - default is 200. - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - format: int64 - type: integer - maxNumberOfMessageEvents: - description: |- - The global default max number of message events per span. - default is 200. - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - format: int64 - type: integer - maxTagLength: - description: |- - Optional. Controls the overall path length allowed in a reported span. - NOTE: currently only controls max length of the path tag. - format: int32 - type: integer - type: object - zipkin: - description: Configures a tracing provider that - uses the Zipkin API. - properties: - enable64bitTraceId: - description: |- - Optional. A 128 bit trace id will be used in Istio. - If true, will result in a 64 bit trace id being used. - type: boolean - maxTagLength: - description: |- - Optional. Controls the overall path length allowed in a reported span. - NOTE: currently only controls max length of the path tag. - format: int32 - type: integer - path: - description: |- - Optional. Specifies the endpoint of Zipkin API. - The default value is "/api/v2/spans". - type: string - port: - description: REQUIRED. Specifies the port of - the service. - format: int32 - type: integer - service: - description: |- - REQUIRED. Specifies the service that the Zipkin API. - The format is `[/]`. The specification of `` is required only when it is insufficient - to unambiguously resolve a service in the service registry. The `` is a fully qualified host name of a - service defined by the Kubernetes service or ServiceEntry. - - Example: "zipkin.default.svc.cluster.local" or "bar/zipkin.example.com". - type: string - required: - - port - - service - type: object - required: - - name - type: object - x-kubernetes-validations: - - message: At most one of [envoyExtAuthzHttp envoyExtAuthzGrpc - zipkin lightstep datadog stackdriver opencensus - skywalking opentelemetry prometheus envoyFileAccessLog - envoyHttpAls envoyTcpAls envoyOtelAls] should be - set - rule: (has(self.envoyExtAuthzHttp)?1:0) + (has(self.envoyExtAuthzGrpc)?1:0) - + (has(self.zipkin)?1:0) + (has(self.lightstep)?1:0) - + (has(self.datadog)?1:0) + (has(self.stackdriver)?1:0) - + (has(self.opencensus)?1:0) + (has(self.skywalking)?1:0) - + (has(self.opentelemetry)?1:0) + (has(self.prometheus)?1:0) - + (has(self.envoyFileAccessLog)?1:0) + (has(self.envoyHttpAls)?1:0) - + (has(self.envoyTcpAls)?1:0) + (has(self.envoyOtelAls)?1:0) - <= 1 - maxItems: 1000 - type: array - h2UpgradePolicy: - description: |- - Specify if http1.1 connections should be upgraded to http2 by default. - if sidecar is installed on all pods in the mesh, then this should be set to `UPGRADE`. - If one or more services or namespaces do not have sidecar(s), then this should be set to `DO_NOT_UPGRADE`. - It can be enabled by destination using the `destinationRule.trafficPolicy.connectionPool.http.h2UpgradePolicy` override. - enum: - - DO_NOT_UPGRADE - - UPGRADE - type: string - inboundClusterStatName: - description: |- - Name to be used while emitting statistics for inbound clusters. The same pattern is used while computing stat prefix for - network filters like TCP and Redis. - By default, Istio emits statistics with the pattern `inbound|||`. - For example `inbound|7443|grpc-reviews|reviews.prod.svc.cluster.local`. This can be used to override that pattern. - - A Pattern can be composed of various pre-defined variables. The following variables are supported. - - - `%SERVICE%` - Will be substituted with short hostname of the service. - - `%SERVICE_NAME%` - Will be substituted with name of the service. - - `%SERVICE_FQDN%` - Will be substituted with FQDN of the service. - - `%SERVICE_PORT%` - Will be substituted with port of the service. - - `%TARGET_PORT%` - Will be substituted with the target port of the service. - - `%SERVICE_PORT_NAME%` - Will be substituted with port name of the service. - - Following are some examples of supported patterns for reviews: - - - `%SERVICE_FQDN%_%SERVICE_PORT%` will use reviews.prod.svc.cluster.local_7443 as the stats name. - - `%SERVICE%` will use reviews.prod as the stats name. - type: string - inboundTrafficPolicy: - description: |- - Set the default behavior of the sidecar for handling inbound - traffic to the application. If your application listens on - localhost, you will need to set this to `LOCALHOST`. - properties: - mode: - enum: - - PASSTHROUGH - - LOCALHOST - type: string - type: object - ingressClass: - description: |- - Class of ingress resources to be processed by Istio ingress - controller. This corresponds to the value of - `kubernetes.io/ingress.class` annotation. - type: string - ingressControllerMode: - description: |- - Defines whether to use Istio ingress controller for annotated or all ingress resources. - Default mode is `STRICT`. - enum: - - UNSPECIFIED - - "OFF" - - DEFAULT - - STRICT - type: string - ingressSelector: - description: |- - Defines which gateway deployment to use as the Ingress controller. This field corresponds to - the Gateway.selector field, and will be set as `istio: INGRESS_SELECTOR`. - By default, `ingressgateway` is used, which will select the default IngressGateway as it has the - `istio: ingressgateway` labels. - It is recommended that this is the same value as ingressService. - type: string - ingressService: - description: |- - Name of the Kubernetes service used for the istio ingress controller. - If no ingress controller is specified, the default value `istio-ingressgateway` is used. - type: string - localityLbSetting: - description: |- - Locality based load balancing distribution or failover settings. - If unspecified, locality based load balancing will be enabled by default. - However, this requires outlierDetection to actually take effect for a particular - service, see https://istio.io/latest/docs/tasks/traffic-management/locality-load-balancing/failover/ - properties: - distribute: - description: |- - Optional: only one of distribute, failover or failoverPriority can be set. - Explicitly specify loadbalancing weight across different zones and geographical locations. - Refer to [Locality weighted load balancing](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/locality_weight) - If empty, the locality weight is set according to the endpoints number within it. - items: - description: |- - Describes how traffic originating in the 'from' zone or sub-zone is - distributed over a set of 'to' zones. Syntax for specifying a zone is - {region}/{zone}/{sub-zone} and terminal wildcards are allowed on any - segment of the specification. Examples: - - `*` - matches all localities - - `us-west/*` - all zones and sub-zones within the us-west region - - `us-west/zone-1/*` - all sub-zones within us-west/zone-1 - properties: - from: - description: Originating locality, '/' separated, - e.g. 'region/zone/sub_zone'. - type: string - to: - additionalProperties: - format: int32 - type: integer - description: |- - Map of upstream localities to traffic distribution weights. The sum of - all weights should be 100. Any locality not present will - receive no traffic. - type: object - type: object - type: array - enabled: - description: |- - enable locality load balancing, this is DestinationRule-level and will override mesh wide settings in entirety. - e.g. true means that turn on locality load balancing for this DestinationRule no matter what mesh wide settings is. - type: boolean - failover: - description: |- - Optional: only one of distribute, failover or failoverPriority can be set. - Explicitly specify the region traffic will land on when endpoints in local region becomes unhealthy. - Should be used together with OutlierDetection to detect unhealthy endpoints. - Note: if no OutlierDetection specified, this will not take effect. - items: - description: |- - Specify the traffic failover policy across regions. Since zone and sub-zone - failover is supported by default this only needs to be specified for - regions when the operator needs to constrain traffic failover so that - the default behavior of failing over to any endpoint globally does not - apply. This is useful when failing over traffic across regions would not - improve service health or may need to be restricted for other reasons - like regulatory controls. - properties: - from: - description: Originating region. - type: string - to: - description: |- - Destination region the traffic will fail over to when endpoints in - the 'from' region becomes unhealthy. - type: string - type: object - type: array - failoverPriority: - description: |- - failoverPriority is an ordered list of labels used to sort endpoints to do priority based load balancing. - This is to support traffic failover across different groups of endpoints. - Two kinds of labels can be specified: - - - Specify only label keys `[key1, key2, key3]`, istio would compare the label values of client with endpoints. - Suppose there are total N label keys `[key1, key2, key3, ...keyN]` specified: - - 1. Endpoints matching all N labels with the client proxy have priority P(0) i.e. the highest priority. - 2. Endpoints matching the first N-1 labels with the client proxy have priority P(1) i.e. second highest priority. - 3. By extension of this logic, endpoints matching only the first label with the client proxy has priority P(N-1) i.e. second lowest priority. - 4. All the other endpoints have priority P(N) i.e. lowest priority. - - - Specify labels with key and value `[key1=value1, key2=value2, key3=value3]`, istio would compare the labels with endpoints. - Suppose there are total N labels `[key1=value1, key2=value2, key3=value3, ...keyN=valueN]` specified: - - 1. Endpoints matching all N labels have priority P(0) i.e. the highest priority. - 2. Endpoints matching the first N-1 labels have priority P(1) i.e. second highest priority. - 3. By extension of this logic, endpoints matching only the first label has priority P(N-1) i.e. second lowest priority. - 4. All the other endpoints have priority P(N) i.e. lowest priority. - - Note: For a label to be considered for match, the previous labels must match, i.e. nth label would be considered matched only if first n-1 labels match. - - It can be any label specified on both client and server workloads. - The following labels which have special semantic meaning are also supported: - - - `topology.istio.io/network` is used to match the network metadata of an endpoint, which can be specified by pod/namespace label `topology.istio.io/network`, sidecar env `ISTIO_META_NETWORK` or MeshNetworks. - - `topology.istio.io/cluster` is used to match the clusterID of an endpoint, which can be specified by pod label `topology.istio.io/cluster` or pod env `ISTIO_META_CLUSTER_ID`. - - `topology.kubernetes.io/region` is used to match the region metadata of an endpoint, which maps to Kubernetes node label `topology.kubernetes.io/region` or the deprecated label `failure-domain.beta.kubernetes.io/region`. - - `topology.kubernetes.io/zone` is used to match the zone metadata of an endpoint, which maps to Kubernetes node label `topology.kubernetes.io/zone` or the deprecated label `failure-domain.beta.kubernetes.io/zone`. - - `topology.istio.io/subzone` is used to match the subzone metadata of an endpoint, which maps to Istio node label `topology.istio.io/subzone`. - - `kubernetes.io/hostname` is used to match the current node of an endpoint, which maps to Kubernetes node label `kubernetes.io/hostname`. - - The below topology config indicates the following priority levels: - - ```yaml - failoverPriority: - - "topology.istio.io/network" - - "topology.kubernetes.io/region" - - "topology.kubernetes.io/zone" - - "topology.istio.io/subzone" - ``` - - 1. endpoints match same [network, region, zone, subzone] label with the client proxy have the highest priority. - 2. endpoints have same [network, region, zone] label but different [subzone] label with the client proxy have the second highest priority. - 3. endpoints have same [network, region] label but different [zone] label with the client proxy have the third highest priority. - 4. endpoints have same [network] but different [region] labels with the client proxy have the fourth highest priority. - 5. all the other endpoints have the same lowest priority. - - Suppose a service associated endpoints reside in multi clusters, the below example represents: - 1. endpoints in `clusterA` and has `version=v1` label have P(0) priority. - 2. endpoints not in `clusterA` but has `version=v1` label have P(1) priority. - 2. all the other endpoints have P(2) priority. - - ```yaml - failoverPriority: - - "version=v1" - - "topology.istio.io/cluster=clusterA" - ``` - - Optional: only one of distribute, failover or failoverPriority can be set. - And it should be used together with `OutlierDetection` to detect unhealthy endpoints, otherwise has no effect. - items: - type: string - type: array - type: object - meshMTLS: - description: "The below configuration parameters can be - used to specify TLSConfig for mesh traffic.\nFor example, - a user could enable min TLS version for ISTIO_MUTUAL - traffic and specify a curve for non ISTIO_MUTUAL traffic - like below:\n```yaml\nmeshConfig:\n\n\tmeshMTLS:\n\t - \ minProtocolVersion: TLSV1_3\n\ttlsDefaults:\n\t Note: - applicable only for non ISTIO_MUTUAL scenarios\n\t ecdhCurves:\n\t - \ - P-256\n\t - P-512\n\n```\nConfiguration of - mTLS for traffic between workloads with ISTIO_MUTUAL - TLS traffic.\n\nNote: Mesh mTLS does not respect ECDH - curves." - properties: - cipherSuites: - description: |- - Optional: If specified, the TLS connection will only support the specified cipher list when negotiating TLS 1.0-1.2. - If not specified, the following cipher suites will be used: - ``` - ECDHE-ECDSA-AES256-GCM-SHA384 - ECDHE-RSA-AES256-GCM-SHA384 - ECDHE-ECDSA-AES128-GCM-SHA256 - ECDHE-RSA-AES128-GCM-SHA256 - AES256-GCM-SHA384 - AES128-GCM-SHA256 - ``` - items: - type: string - type: array - ecdhCurves: - description: |- - Optional: If specified, the TLS connection will only support the specified ECDH curves for the DH key exchange. - If not specified, the default curves enforced by Envoy will be used. For details about the default curves, refer to - [Ecdh Curves](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/transport_sockets/tls/v3/common.proto). - items: - type: string - type: array - minProtocolVersion: - description: |- - Optional: the minimum TLS protocol version. The default minimum - TLS version will be TLS 1.2. As servers may not be Envoy and be - set to TLS 1.2 (e.g., workloads using mTLS without sidecars), the - minimum TLS version for clients may also be TLS 1.2. - In the current Istio implementation, the maximum TLS protocol version - is TLS 1.3. - enum: - - TLS_AUTO - - TLSV1_2 - - TLSV1_3 - type: string - type: object - outboundClusterStatName: - description: |- - Name to be used while emitting statistics for outbound clusters. The same pattern is used while computing stat prefix for - network filters like TCP and Redis. - By default, Istio emits statistics with the pattern `outbound|||`. - For example `outbound|8080|v2|reviews.prod.svc.cluster.local`. This can be used to override that pattern. - - A Pattern can be composed of various pre-defined variables. The following variables are supported. - - - `%SERVICE%` - Will be substituted with short hostname of the service. - - `%SERVICE_NAME%` - Will be substituted with name of the service. - - `%SERVICE_FQDN%` - Will be substituted with FQDN of the service. - - `%SERVICE_PORT%` - Will be substituted with port of the service. - - `%SERVICE_PORT_NAME%` - Will be substituted with port name of the service. - - `%SUBSET_NAME%` - Will be substituted with subset. - - Following are some examples of supported patterns for reviews: - - - `%SERVICE_FQDN%_%SERVICE_PORT%` will use `reviews.prod.svc.cluster.local_7443` as the stats name. - - `%SERVICE%` will use reviews.prod as the stats name. - type: string - outboundTrafficPolicy: - description: |- - Set the default behavior of the sidecar for handling outbound - traffic from the application. - - Can be overridden at a Sidecar level by setting the `OutboundTrafficPolicy` in the - [Sidecar API](https://istio.io/docs/reference/config/networking/sidecar/#OutboundTrafficPolicy). - - Default mode is `ALLOW_ANY`, which means outbound traffic to unknown destinations will be allowed. - properties: - mode: - enum: - - REGISTRY_ONLY - - ALLOW_ANY - type: string - type: object - pathNormalization: - description: |- - ProxyPathNormalization configures how URL paths in incoming and outgoing HTTP requests are - normalized by the sidecars and gateways. - The normalized paths will be used in all aspects through the requests' lifetime on the - sidecars and gateways, which includes routing decisions in outbound direction (client proxy), - authorization policy match and enforcement in inbound direction (server proxy), and the URL - path proxied to the upstream service. - If not set, the NormalizationType.DEFAULT configuration will be used. - properties: - normalization: - enum: - - DEFAULT - - NONE - - BASE - - MERGE_SLASHES - - DECODE_AND_MERGE_SLASHES - type: string - type: object - protocolDetectionTimeout: - description: |- - Automatic protocol detection uses a set of heuristics to - determine whether the connection is using TLS or not (on the - server side), as well as the application protocol being used - (e.g., http vs tcp). These heuristics rely on the client sending - the first bits of data. For server first protocols like MySQL, - MongoDB, etc. Envoy will timeout on the protocol detection after - the specified period, defaulting to non mTLS plain TCP - traffic. Set this field to tweak the period that Envoy will wait - for the client to send the first bits of data. (MUST BE >=1ms or - 0s to disable). Default detection timeout is 0s (no timeout). - - Setting a timeout is not recommended nor safe. Even high timeouts (>5s) will be hit - occasionally, and when they occur the result is typically broken traffic that may not - recover on its own. Exceptionally high values might solve this, but injecting 60s delays - onto new connections is generally not tenable anyways. - type: string - proxyHttpPort: - description: Port on which Envoy should listen for HTTP - PROXY requests if set. - format: int32 - type: integer - proxyInboundListenPort: - description: |- - Port on which Envoy should listen for all inbound traffic to the pod/vm will be captured to. - Default port is 15006. - format: int32 - type: integer - proxyListenPort: - description: |- - Port on which Envoy should listen for all outbound traffic to other services. - Default port is 15001. - format: int32 - type: integer - rootNamespace: - description: |- - The namespace to treat as the administrative root namespace for - Istio configuration. When processing a leaf namespace Istio will search for - declarations in that namespace first and if none are found it will - search in the root namespace. Any matching declaration found in the root - namespace is processed as if it were declared in the leaf namespace. - - The precise semantics of this processing are documented on each resource - type. - type: string - serviceSettings: - description: Settings to be applied to select services. - items: - description: |- - Settings to be applied to select services. - - For example, the following configures all services in namespace "foo" as well as the - "bar" service in namespace "baz" to be considered cluster-local: - - ```yaml - serviceSettings: - - settings: - clusterLocal: true - hosts: - - "*.foo.svc.cluster.local" - - "bar.baz.svc.cluster.local" - - ``` - properties: - hosts: - description: |- - The services to which the Settings should be applied. Services are selected using the hostname - matching rules used by DestinationRule. - - For example: foo.bar.svc.cluster.local, *.baz.svc.cluster.local - items: - type: string - type: array - settings: - description: The settings to apply to the selected - services. - properties: - clusterLocal: - description: |- - If true, specifies that the client and service endpoints must reside in the same cluster. - By default, in multi-cluster deployments, the Istio control plane assumes all service - endpoints to be reachable from any client in any of the clusters which are part of the - mesh. This configuration option limits the set of service endpoints visible to a client - to be cluster scoped. - - There are some common scenarios when this can be useful: - - - A service (or group of services) is inherently local to the cluster and has local storage - for that cluster. For example, the kube-system namespace (e.g. the Kube API Server). - - A mesh administrator wants to slowly migrate services to Istio. They might start by first - having services cluster-local and then slowly transition them to mesh-wide. They could do - this service-by-service (e.g. mysvc.myns.svc.cluster.local) or as a group - (e.g. *.myns.svc.cluster.local). - - By default Istio will consider kubernetes.default.svc (i.e. the API Server) as well as all - services in the kube-system namespace to be cluster-local, unless explicitly overridden here. - type: boolean - type: object - type: object - type: array - tcpKeepalive: - description: If set then set `SO_KEEPALIVE` on the socket - to enable TCP Keepalives. - properties: - interval: - description: |- - The time duration between keep-alive probes. - Default is to use the OS level configuration - (unless overridden, Linux defaults to 75s.) - type: string - probes: - description: |- - Maximum number of keepalive probes to send without response before - deciding the connection is dead. Default is to use the OS level configuration - (unless overridden, Linux defaults to 9.) - format: int32 - type: integer - time: - description: |- - The time duration a connection needs to be idle before keep-alive - probes start being sent. Default is to use the OS level configuration - (unless overridden, Linux defaults to 7200s (ie 2 hours.) - type: string - type: object - tlsDefaults: - description: |- - Configuration of TLS for all traffic except for ISTIO_MUTUAL mode. - Currently, this supports configuration of ecdhCurves and cipherSuites only. - For ISTIO_MUTUAL TLS settings, use meshMTLS configuration. - properties: - cipherSuites: - description: |- - Optional: If specified, the TLS connection will only support the specified cipher list when negotiating TLS 1.0-1.2. - If not specified, the following cipher suites will be used: - ``` - ECDHE-ECDSA-AES256-GCM-SHA384 - ECDHE-RSA-AES256-GCM-SHA384 - ECDHE-ECDSA-AES128-GCM-SHA256 - ECDHE-RSA-AES128-GCM-SHA256 - AES256-GCM-SHA384 - AES128-GCM-SHA256 - ``` - items: - type: string - type: array - ecdhCurves: - description: |- - Optional: If specified, the TLS connection will only support the specified ECDH curves for the DH key exchange. - If not specified, the default curves enforced by Envoy will be used. For details about the default curves, refer to - [Ecdh Curves](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/transport_sockets/tls/v3/common.proto). - items: - type: string - type: array - minProtocolVersion: - description: |- - Optional: the minimum TLS protocol version. The default minimum - TLS version will be TLS 1.2. As servers may not be Envoy and be - set to TLS 1.2 (e.g., workloads using mTLS without sidecars), the - minimum TLS version for clients may also be TLS 1.2. - In the current Istio implementation, the maximum TLS protocol version - is TLS 1.3. - enum: - - TLS_AUTO - - TLSV1_2 - - TLSV1_3 - type: string - type: object - trustDomain: - description: |- - The trust domain corresponds to the trust root of a system. - Refer to [SPIFFE-ID](https://github.com/spiffe/spiffe/blob/master/standards/SPIFFE-ID.md#21-trust-domain) - type: string - trustDomainAliases: - description: |- - The trust domain aliases represent the aliases of `trustDomain`. - For example, if we have - ```yaml - trustDomain: td1 - trustDomainAliases: ["td2", "td3"] - ``` - Any service with the identity `td1/ns/foo/sa/a-service-account`, `td2/ns/foo/sa/a-service-account`, - or `td3/ns/foo/sa/a-service-account` will be treated the same in the Istio mesh. - items: - type: string - type: array - verifyCertificateAtClient: - description: |- - `VerifyCertificateAtClient` sets the mesh global default for peer certificate validation - at the client-side proxy when `SIMPLE` TLS or `MUTUAL` TLS (non `ISTIO_MUTUAL`) origination - modes are used. This setting can be overridden at the host level via DestinationRule API. - By default, `VerifyCertificateAtClient` is `true`. - - `CaCertificates`: If set, proxy verifies CA signature based on given CaCertificates. If unset, - and VerifyCertificateAtClient is true, proxy uses default System CA bundle. If unset and - `VerifyCertificateAtClient` is false, proxy will not verify the CA. - - `SubjectAltNames`: If set, proxy verifies subject alt names are present in the SAN. If unset, - and `VerifyCertificateAtClient` is true, proxy uses host in destination rule to verify the SANs. - If unset, and `VerifyCertificateAtClient` is false, proxy does not verify SANs. - - For SAN, client-side proxy will exact match host in `DestinationRule` as well as one level - wildcard if the specified host in DestinationRule doesn't contain a wildcard. - For example, if the host in `DestinationRule` is `x.y.com`, client-side proxy will - match either `x.y.com` or `*.y.com` for the SAN in the presented server certificate. - For wildcard host name in DestinationRule, client-side proxy will do a suffix match. For example, - if host is `*.x.y.com`, client-side proxy will verify the presented server certificate SAN matches - “.x.y.com` suffix. - - Deprecated: Marked as deprecated in mesh/v1alpha1/config.proto. - type: boolean - type: object - multiCluster: - description: |- - Settings for multicluster. - The name of the cluster we are installing in. Note this is a user-defined name, which must be consistent - with Istiod configuration. - properties: - clusterName: - description: |- - The name of the cluster this installation will run in. This is required for sidecar injection - to properly label proxies - type: string - enabled: - description: |- - Enables the connection between two kubernetes clusters via their respective ingressgateway services. - Use if the pods in each cluster cannot directly talk to one another. - type: boolean - globalDomainSuffix: - description: The suffix for global service names. - type: string - includeEnvoyFilter: - description: Enable envoy filter to translate `globalDomainSuffix` - to cluster local suffix for cross cluster communication. - type: boolean - type: object - podAnnotations: - additionalProperties: - type: string - description: Annotations added to each pod. The default annotations - are required for scraping prometheus (in most environments). - type: object - podLabels: - additionalProperties: - type: string - description: Additional labels to apply on the pod level. - type: object - resources: - description: The k8s resource requests and limits for the - ztunnel Pods. - properties: - claims: - description: |- - Claims lists the names of resources, defined in spec.resourceClaims, - that are used by this container. - - This is an alpha field and requires enabling the - DynamicResourceAllocation feature gate. - - This field is immutable. It can only be set for containers. - items: - description: ResourceClaim references one entry in PodSpec.ResourceClaims. - properties: - name: - description: |- - Name must match the name of one entry in pod.spec.resourceClaims of - the Pod where this field is used. It makes that resource available - inside a container. - type: string - request: - description: |- - Request is the name chosen for a request in the referenced claim. - If empty, everything from the claim is made available, otherwise - only the result of this request. - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: |- - Limits describes the maximum amount of compute resources allowed. - More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: |- - Requests describes the minimum amount of compute resources required. - If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, - otherwise to an implementation-defined value. Requests cannot exceed Limits. - More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - type: object - type: object - revision: - description: Configures the revision this control plane is - a part of - type: string - tag: - description: The container image tag to pull. Image will be - `Hub/Image:Tag-Variant`. - type: string - variant: - description: The container image variant to pull. Options - are "debug" or "distroless". Unset will use the default - for the given version. - type: string - volumeMounts: - description: Additional volumeMounts to the ztunnel container - items: - description: VolumeMount describes a mounting of a Volume - within a container. - properties: - mountPath: - description: |- - Path within the container at which the volume should be mounted. Must - not contain ':'. - type: string - mountPropagation: - description: |- - mountPropagation determines how mounts are propagated from the host - to container and the other way around. - When not set, MountPropagationNone is used. - This field is beta in 1.10. - When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified - (which defaults to None). - type: string - name: - description: This must match the Name of a Volume. - type: string - readOnly: - description: |- - Mounted read-only if true, read-write otherwise (false or unspecified). - Defaults to false. - type: boolean - recursiveReadOnly: - description: |- - RecursiveReadOnly specifies whether read-only mounts should be handled - recursively. - - If ReadOnly is false, this field has no meaning and must be unspecified. - - If ReadOnly is true, and this field is set to Disabled, the mount is not made - recursively read-only. If this field is set to IfPossible, the mount is made - recursively read-only, if it is supported by the container runtime. If this - field is set to Enabled, the mount is made recursively read-only if it is - supported by the container runtime, otherwise the pod will not be started and - an error will be generated to indicate the reason. - - If this field is set to IfPossible or Enabled, MountPropagation must be set to - None (or be unspecified, which defaults to None). - - If this field is not specified, it is treated as an equivalent of Disabled. - type: string - subPath: - description: |- - Path within the volume from which the container's volume should be mounted. - Defaults to "" (volume's root). - type: string - subPathExpr: - description: |- - Expanded path within the volume from which the container's volume should be mounted. - Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. - Defaults to "" (volume's root). - SubPathExpr and SubPath are mutually exclusive. - type: string - required: - - mountPath - - name - type: object - type: array - volumes: - description: Additional volumes to add to the ztunnel Pod. - items: - description: Volume represents a named volume in a pod that - may be accessed by any container in the pod. - properties: - awsElasticBlockStore: - description: |- - awsElasticBlockStore represents an AWS Disk resource that is attached to a - kubelet's host machine and then exposed to the pod. - More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - properties: - fsType: - description: |- - fsType is the filesystem type of the volume that you want to mount. - Tip: Ensure that the filesystem type is supported by the host operating system. - Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - type: string - partition: - description: |- - partition is the partition in the volume that you want to mount. - If omitted, the default is to mount by volume name. - Examples: For volume /dev/sda1, you specify the partition as "1". - Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). - format: int32 - type: integer - readOnly: - description: |- - readOnly value true will force the readOnly setting in VolumeMounts. - More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - type: boolean - volumeID: - description: |- - volumeID is unique ID of the persistent disk resource in AWS (Amazon EBS volume). - More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - type: string - required: - - volumeID - type: object - azureDisk: - description: azureDisk represents an Azure Data Disk - mount on the host and bind mount to the pod. - properties: - cachingMode: - description: 'cachingMode is the Host Caching mode: - None, Read Only, Read Write.' - type: string - diskName: - description: diskName is the Name of the data disk - in the blob storage - type: string - diskURI: - description: diskURI is the URI of data disk in - the blob storage - type: string - fsType: - default: ext4 - description: |- - fsType is Filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - type: string - kind: - description: 'kind expected values are Shared: multiple - blob disks per storage account Dedicated: single - blob disk per storage account Managed: azure - managed data disk (only in managed availability - set). defaults to shared' - type: string - readOnly: - default: false - description: |- - readOnly Defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - description: azureFile represents an Azure File Service - mount on the host and bind mount to the pod. - properties: - readOnly: - description: |- - readOnly defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - type: boolean - secretName: - description: secretName is the name of secret that - contains Azure Storage Account Name and Key - type: string - shareName: - description: shareName is the azure share Name - type: string - required: - - secretName - - shareName - type: object - cephfs: - description: cephFS represents a Ceph FS mount on the - host that shares a pod's lifetime - properties: - monitors: - description: |- - monitors is Required: Monitors is a collection of Ceph monitors - More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it - items: - type: string - type: array - x-kubernetes-list-type: atomic - path: - description: 'path is Optional: Used as the mounted - root, rather than the full Ceph tree, default - is /' - type: string - readOnly: - description: |- - readOnly is Optional: Defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it - type: boolean - secretFile: - description: |- - secretFile is Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret - More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it - type: string - secretRef: - description: |- - secretRef is Optional: SecretRef is reference to the authentication secret for User, default is empty. - More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - user: - description: |- - user is optional: User is the rados user name, default is admin - More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it - type: string - required: - - monitors - type: object - cinder: - description: |- - cinder represents a cinder volume attached and mounted on kubelets host machine. - More info: https://examples.k8s.io/mysql-cinder-pd/README.md - properties: - fsType: - description: |- - fsType is the filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - More info: https://examples.k8s.io/mysql-cinder-pd/README.md - type: string - readOnly: - description: |- - readOnly defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - More info: https://examples.k8s.io/mysql-cinder-pd/README.md - type: boolean - secretRef: - description: |- - secretRef is optional: points to a secret object containing parameters used to connect - to OpenStack. - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - description: |- - volumeID used to identify the volume in cinder. - More info: https://examples.k8s.io/mysql-cinder-pd/README.md - type: string - required: - - volumeID - type: object - configMap: - description: configMap represents a configMap that should - populate this volume - properties: - defaultMode: - description: |- - defaultMode is optional: mode bits used to set permissions on created files by default. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - Defaults to 0644. - Directories within the path are not affected by this setting. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - items: - description: |- - items if unspecified, each key-value pair in the Data field of the referenced - ConfigMap will be projected into the volume as a file whose name is the - key and content is the value. If specified, the listed keys will be - projected into the specified paths, and unlisted keys will not be - present. If a key is specified which is not present in the ConfigMap, - the volume setup will error unless it is marked optional. Paths must be - relative and may not contain the '..' path or start with '..'. - items: - description: Maps a string key to a path within - a volume. - properties: - key: - description: key is the key to project. - type: string - mode: - description: |- - mode is Optional: mode bits used to set permissions on this file. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - If not specified, the volume defaultMode will be used. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - path: - description: |- - path is the relative path of the file to map the key to. - May not be an absolute path. - May not contain the path element '..'. - May not start with the string '..'. - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - optional: - description: optional specify whether the ConfigMap - or its keys must be defined - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - description: csi (Container Storage Interface) represents - ephemeral storage that is handled by certain external - CSI drivers (Beta feature). - properties: - driver: - description: |- - driver is the name of the CSI driver that handles this volume. - Consult with your admin for the correct name as registered in the cluster. - type: string - fsType: - description: |- - fsType to mount. Ex. "ext4", "xfs", "ntfs". - If not provided, the empty value is passed to the associated CSI driver - which will determine the default filesystem to apply. - type: string - nodePublishSecretRef: - description: |- - nodePublishSecretRef is a reference to the secret object containing - sensitive information to pass to the CSI driver to complete the CSI - NodePublishVolume and NodeUnpublishVolume calls. - This field is optional, and may be empty if no secret is required. If the - secret object contains more than one secret, all secret references are passed. - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - description: |- - readOnly specifies a read-only configuration for the volume. - Defaults to false (read/write). - type: boolean - volumeAttributes: - additionalProperties: - type: string - description: |- - volumeAttributes stores driver-specific properties that are passed to the CSI - driver. Consult your driver's documentation for supported values. - type: object - required: - - driver - type: object - downwardAPI: - description: downwardAPI represents downward API about - the pod that should populate this volume - properties: - defaultMode: - description: |- - Optional: mode bits to use on created files by default. Must be a - Optional: mode bits used to set permissions on created files by default. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - Defaults to 0644. - Directories within the path are not affected by this setting. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - items: - description: Items is a list of downward API volume - file - items: - description: DownwardAPIVolumeFile represents - information to create the file containing the - pod field - properties: - fieldRef: - description: 'Required: Selects a field of - the pod: only annotations, labels, name, - namespace and uid are supported.' - properties: - apiVersion: - description: Version of the schema the - FieldPath is written in terms of, defaults - to "v1". - type: string - fieldPath: - description: Path of the field to select - in the specified API version. - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - description: |- - Optional: mode bits used to set permissions on this file, must be an octal value - between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - If not specified, the volume defaultMode will be used. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - path: - description: 'Required: Path is the relative - path name of the file to be created. Must - not be absolute or contain the ''..'' path. - Must be utf-8 encoded. The first item of - the relative path must not start with ''..''' - type: string - resourceFieldRef: - description: |- - Selects a resource of the container: only resources limits and requests - (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. - properties: - containerName: - description: 'Container name: required - for volumes, optional for env vars' - type: string - divisor: - anyOf: - - type: integer - - type: string - description: Specifies the output format - of the exposed resources, defaults to - "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource to select' - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - x-kubernetes-list-type: atomic - type: object - emptyDir: - description: |- - emptyDir represents a temporary directory that shares a pod's lifetime. - More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir - properties: - medium: - description: |- - medium represents what type of storage medium should back this directory. - The default is "" which means to use the node's default medium. - Must be an empty string (default) or Memory. - More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - description: |- - sizeLimit is the total amount of local storage required for this EmptyDir volume. - The size limit is also applicable for memory medium. - The maximum usage on memory medium EmptyDir would be the minimum value between - the SizeLimit specified here and the sum of memory limits of all containers in a pod. - The default is nil which means that the limit is undefined. - More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - ephemeral: - description: |- - ephemeral represents a volume that is handled by a cluster storage driver. - The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts, - and deleted when the pod is removed. - - Use this if: - a) the volume is only needed while the pod runs, - b) features of normal volumes like restoring from snapshot or capacity - tracking are needed, - c) the storage driver is specified through a storage class, and - d) the storage driver supports dynamic volume provisioning through - a PersistentVolumeClaim (see EphemeralVolumeSource for more - information on the connection between this volume type - and PersistentVolumeClaim). - - Use PersistentVolumeClaim or one of the vendor-specific - APIs for volumes that persist for longer than the lifecycle - of an individual pod. - - Use CSI for light-weight local ephemeral volumes if the CSI driver is meant to - be used that way - see the documentation of the driver for - more information. - - A pod can use both types of ephemeral volumes and - persistent volumes at the same time. - properties: - volumeClaimTemplate: - description: |- - Will be used to create a stand-alone PVC to provision the volume. - The pod in which this EphemeralVolumeSource is embedded will be the - owner of the PVC, i.e. the PVC will be deleted together with the - pod. The name of the PVC will be `-` where - `` is the name from the `PodSpec.Volumes` array - entry. Pod validation will reject the pod if the concatenated name - is not valid for a PVC (for example, too long). - - An existing PVC with that name that is not owned by the pod - will *not* be used for the pod to avoid using an unrelated - volume by mistake. Starting the pod is then blocked until - the unrelated PVC is removed. If such a pre-created PVC is - meant to be used by the pod, the PVC has to updated with an - owner reference to the pod once the pod exists. Normally - this should not be necessary, but it may be useful when - manually reconstructing a broken cluster. - - This field is read-only and no changes will be made by Kubernetes - to the PVC after it has been created. - - Required, must not be nil. - properties: - metadata: - description: |- - May contain labels and annotations that will be copied into the PVC - when creating it. No other fields are allowed and will be rejected during - validation. - type: object - spec: - description: |- - The specification for the PersistentVolumeClaim. The entire content is - copied unchanged into the PVC that gets created from this - template. The same fields as in a PersistentVolumeClaim - are also valid here. - properties: - accessModes: - description: |- - accessModes contains the desired access modes the volume should have. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1 - items: - type: string - type: array - x-kubernetes-list-type: atomic - dataSource: - description: |- - dataSource field can be used to specify either: - * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) - * An existing PVC (PersistentVolumeClaim) - If the provisioner or an external controller can support the specified data source, - it will create a new volume based on the contents of the specified data source. - When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, - and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. - If the namespace is specified, then dataSourceRef will not be copied to dataSource. - properties: - apiGroup: - description: |- - APIGroup is the group for the resource being referenced. - If APIGroup is not specified, the specified Kind must be in the core API group. - For any other third-party types, APIGroup is required. - type: string - kind: - description: Kind is the type of resource - being referenced - type: string - name: - description: Name is the name of resource - being referenced - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - description: |- - dataSourceRef specifies the object from which to populate the volume with data, if a non-empty - volume is desired. This may be any object from a non-empty API group (non - core object) or a PersistentVolumeClaim object. - When this field is specified, volume binding will only succeed if the type of - the specified object matches some installed volume populator or dynamic - provisioner. - This field will replace the functionality of the dataSource field and as such - if both fields are non-empty, they must have the same value. For backwards - compatibility, when namespace isn't specified in dataSourceRef, - both fields (dataSource and dataSourceRef) will be set to the same - value automatically if one of them is empty and the other is non-empty. - When namespace is specified in dataSourceRef, - dataSource isn't set to the same value and must be empty. - There are three important differences between dataSource and dataSourceRef: - * While dataSource only allows two specific types of objects, dataSourceRef - allows any non-core object, as well as PersistentVolumeClaim objects. - * While dataSource ignores disallowed values (dropping them), dataSourceRef - preserves all values, and generates an error if a disallowed value is - specified. - * While dataSource only allows local objects, dataSourceRef allows objects - in any namespaces. - (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. - (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. - properties: - apiGroup: - description: |- - APIGroup is the group for the resource being referenced. - If APIGroup is not specified, the specified Kind must be in the core API group. - For any other third-party types, APIGroup is required. - type: string - kind: - description: Kind is the type of resource - being referenced - type: string - name: - description: Name is the name of resource - being referenced - type: string - namespace: - description: |- - Namespace is the namespace of resource being referenced - Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. - (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled. - type: string - required: - - kind - - name - type: object - resources: - description: |- - resources represents the minimum resources the volume should have. - If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements - that are lower than previous value but must still be higher than capacity recorded in the - status field of the claim. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: |- - Limits describes the maximum amount of compute resources allowed. - More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: |- - Requests describes the minimum amount of compute resources required. - If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, - otherwise to an implementation-defined value. Requests cannot exceed Limits. - More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - type: object - type: object - selector: - description: selector is a label query over - volumes to consider for binding. - properties: - matchExpressions: - description: matchExpressions is a list - of label selector requirements. The - requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label - key that the selector applies - to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - description: |- - storageClassName is the name of the StorageClass required by the claim. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1 - type: string - volumeAttributesClassName: - description: |- - volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. - If specified, the CSI driver will create or update the volume with the attributes defined - in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, - it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass - will be applied to the claim but it's not allowed to reset this field to empty string once it is set. - If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass - will be set by the persistentvolume controller if it exists. - If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be - set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource - exists. - More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ - (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). - type: string - volumeMode: - description: |- - volumeMode defines what type of volume is required by the claim. - Value of Filesystem is implied when not included in claim spec. - type: string - volumeName: - description: volumeName is the binding reference - to the PersistentVolume backing this claim. - type: string - type: object - required: - - spec - type: object - type: object - fc: - description: fc represents a Fibre Channel resource - that is attached to a kubelet's host machine and then - exposed to the pod. - properties: - fsType: - description: |- - fsType is the filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - type: string - lun: - description: 'lun is Optional: FC target lun number' - format: int32 - type: integer - readOnly: - description: |- - readOnly is Optional: Defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - type: boolean - targetWWNs: - description: 'targetWWNs is Optional: FC target - worldwide names (WWNs)' - items: - type: string - type: array - x-kubernetes-list-type: atomic - wwids: - description: |- - wwids Optional: FC volume world wide identifiers (wwids) - Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously. - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - flexVolume: - description: |- - flexVolume represents a generic volume resource that is - provisioned/attached using an exec based plugin. - properties: - driver: - description: driver is the name of the driver to - use for this volume. - type: string - fsType: - description: |- - fsType is the filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script. - type: string - options: - additionalProperties: - type: string - description: 'options is Optional: this field holds - extra command options if any.' - type: object - readOnly: - description: |- - readOnly is Optional: defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - type: boolean - secretRef: - description: |- - secretRef is Optional: secretRef is reference to the secret object containing - sensitive information to pass to the plugin scripts. This may be - empty if no secret object is specified. If the secret object - contains more than one secret, all secrets are passed to the plugin - scripts. - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - description: flocker represents a Flocker volume attached - to a kubelet's host machine. This depends on the Flocker - control service being running - properties: - datasetName: - description: |- - datasetName is Name of the dataset stored as metadata -> name on the dataset for Flocker - should be considered as deprecated - type: string - datasetUUID: - description: datasetUUID is the UUID of the dataset. - This is unique identifier of a Flocker dataset - type: string - type: object - gcePersistentDisk: - description: |- - gcePersistentDisk represents a GCE Disk resource that is attached to a - kubelet's host machine and then exposed to the pod. - More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - properties: - fsType: - description: |- - fsType is filesystem type of the volume that you want to mount. - Tip: Ensure that the filesystem type is supported by the host operating system. - Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - type: string - partition: - description: |- - partition is the partition in the volume that you want to mount. - If omitted, the default is to mount by volume name. - Examples: For volume /dev/sda1, you specify the partition as "1". - Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). - More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - format: int32 - type: integer - pdName: - description: |- - pdName is unique name of the PD resource in GCE. Used to identify the disk in GCE. - More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - type: string - readOnly: - description: |- - readOnly here will force the ReadOnly setting in VolumeMounts. - Defaults to false. - More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - type: boolean - required: - - pdName - type: object - gitRepo: - description: |- - gitRepo represents a git repository at a particular revision. - DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an - EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir - into the Pod's container. - properties: - directory: - description: |- - directory is the target directory name. - Must not contain or start with '..'. If '.' is supplied, the volume directory will be the - git repository. Otherwise, if specified, the volume will contain the git repository in - the subdirectory with the given name. - type: string - repository: - description: repository is the URL - type: string - revision: - description: revision is the commit hash for the - specified revision. - type: string - required: - - repository - type: object - glusterfs: - description: |- - glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. - More info: https://examples.k8s.io/volumes/glusterfs/README.md - properties: - endpoints: - description: |- - endpoints is the endpoint name that details Glusterfs topology. - More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod - type: string - path: - description: |- - path is the Glusterfs volume path. - More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod - type: string - readOnly: - description: |- - readOnly here will force the Glusterfs volume to be mounted with read-only permissions. - Defaults to false. - More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod - type: boolean - required: - - endpoints - - path - type: object - hostPath: - description: |- - hostPath represents a pre-existing file or directory on the host - machine that is directly exposed to the container. This is generally - used for system agents or other privileged things that are allowed - to see the host machine. Most containers will NOT need this. - More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - properties: - path: - description: |- - path of the directory on the host. - If the path is a symlink, it will follow the link to the real path. - More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - type: string - type: - description: |- - type for HostPath Volume - Defaults to "" - More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - type: string - required: - - path - type: object - image: - description: |- - image represents an OCI object (a container image or artifact) pulled and mounted on the kubelet's host machine. - The volume is resolved at pod startup depending on which PullPolicy value is provided: - - - Always: the kubelet always attempts to pull the reference. Container creation will fail If the pull fails. - - Never: the kubelet never pulls the reference and only uses a local image or artifact. Container creation will fail if the reference isn't present. - - IfNotPresent: the kubelet pulls if the reference isn't already present on disk. Container creation will fail if the reference isn't present and the pull fails. - - The volume gets re-resolved if the pod gets deleted and recreated, which means that new remote content will become available on pod recreation. - A failure to resolve or pull the image during pod startup will block containers from starting and may add significant latency. Failures will be retried using normal volume backoff and will be reported on the pod reason and message. - The types of objects that may be mounted by this volume are defined by the container runtime implementation on a host machine and at minimum must include all valid types supported by the container image field. - The OCI object gets mounted in a single directory (spec.containers[*].volumeMounts.mountPath) by merging the manifest layers in the same way as for container images. - The volume will be mounted read-only (ro) and non-executable files (noexec). - Sub path mounts for containers are not supported (spec.containers[*].volumeMounts.subpath). - The field spec.securityContext.fsGroupChangePolicy has no effect on this volume type. - properties: - pullPolicy: - description: |- - Policy for pulling OCI objects. Possible values are: - Always: the kubelet always attempts to pull the reference. Container creation will fail If the pull fails. - Never: the kubelet never pulls the reference and only uses a local image or artifact. Container creation will fail if the reference isn't present. - IfNotPresent: the kubelet pulls if the reference isn't already present on disk. Container creation will fail if the reference isn't present and the pull fails. - Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. - type: string - reference: - description: |- - Required: Image or artifact reference to be used. - Behaves in the same way as pod.spec.containers[*].image. - Pull secrets will be assembled in the same way as for the container image by looking up node credentials, SA image pull secrets, and pod spec image pull secrets. - More info: https://kubernetes.io/docs/concepts/containers/images - This field is optional to allow higher level config management to default or override - container images in workload controllers like Deployments and StatefulSets. - type: string - type: object - iscsi: - description: |- - iscsi represents an ISCSI Disk resource that is attached to a - kubelet's host machine and then exposed to the pod. - More info: https://examples.k8s.io/volumes/iscsi/README.md - properties: - chapAuthDiscovery: - description: chapAuthDiscovery defines whether support - iSCSI Discovery CHAP authentication - type: boolean - chapAuthSession: - description: chapAuthSession defines whether support - iSCSI Session CHAP authentication - type: boolean - fsType: - description: |- - fsType is the filesystem type of the volume that you want to mount. - Tip: Ensure that the filesystem type is supported by the host operating system. - Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi - type: string - initiatorName: - description: |- - initiatorName is the custom iSCSI Initiator Name. - If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface - : will be created for the connection. - type: string - iqn: - description: iqn is the target iSCSI Qualified Name. - type: string - iscsiInterface: - default: default - description: |- - iscsiInterface is the interface Name that uses an iSCSI transport. - Defaults to 'default' (tcp). - type: string - lun: - description: lun represents iSCSI Target Lun number. - format: int32 - type: integer - portals: - description: |- - portals is the iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port - is other than default (typically TCP ports 860 and 3260). - items: - type: string - type: array - x-kubernetes-list-type: atomic - readOnly: - description: |- - readOnly here will force the ReadOnly setting in VolumeMounts. - Defaults to false. - type: boolean - secretRef: - description: secretRef is the CHAP Secret for iSCSI - target and initiator authentication - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - description: |- - targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port - is other than default (typically TCP ports 860 and 3260). - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - description: |- - name of the volume. - Must be a DNS_LABEL and unique within the pod. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - nfs: - description: |- - nfs represents an NFS mount on the host that shares a pod's lifetime - More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - properties: - path: - description: |- - path that is exported by the NFS server. - More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - type: string - readOnly: - description: |- - readOnly here will force the NFS export to be mounted with read-only permissions. - Defaults to false. - More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - type: boolean - server: - description: |- - server is the hostname or IP address of the NFS server. - More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - description: |- - persistentVolumeClaimVolumeSource represents a reference to a - PersistentVolumeClaim in the same namespace. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims - properties: - claimName: - description: |- - claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims - type: string - readOnly: - description: |- - readOnly Will force the ReadOnly setting in VolumeMounts. - Default false. - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - description: photonPersistentDisk represents a PhotonController - persistent disk attached and mounted on kubelets host - machine - properties: - fsType: - description: |- - fsType is the filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - type: string - pdID: - description: pdID is the ID that identifies Photon - Controller persistent disk - type: string - required: - - pdID - type: object - portworxVolume: - description: portworxVolume represents a portworx volume - attached and mounted on kubelets host machine - properties: - fsType: - description: |- - fSType represents the filesystem type to mount - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified. - type: string - readOnly: - description: |- - readOnly defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - type: boolean - volumeID: - description: volumeID uniquely identifies a Portworx - volume - type: string - required: - - volumeID - type: object - projected: - description: projected items for all in one resources - secrets, configmaps, and downward API - properties: - defaultMode: - description: |- - defaultMode are the mode bits used to set permissions on created files by default. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - Directories within the path are not affected by this setting. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - sources: - description: |- - sources is the list of volume projections. Each entry in this list - handles one source. - items: - description: |- - Projection that may be projected along with other supported volume types. - Exactly one of these fields must be set. - properties: - clusterTrustBundle: - description: |- - ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field - of ClusterTrustBundle objects in an auto-updating file. - - Alpha, gated by the ClusterTrustBundleProjection feature gate. - - ClusterTrustBundle objects can either be selected by name, or by the - combination of signer name and a label selector. - - Kubelet performs aggressive normalization of the PEM contents written - into the pod filesystem. Esoteric PEM features such as inter-block - comments and block headers are stripped. Certificates are deduplicated. - The ordering of certificates within the file is arbitrary, and Kubelet - may change the order over time. - properties: - labelSelector: - description: |- - Select all ClusterTrustBundles that match this label selector. Only has - effect if signerName is set. Mutually-exclusive with name. If unset, - interpreted as "match nothing". If set but empty, interpreted as "match - everything". - properties: - matchExpressions: - description: matchExpressions is a - list of label selector requirements. - The requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label - key that the selector applies - to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - name: - description: |- - Select a single ClusterTrustBundle by object name. Mutually-exclusive - with signerName and labelSelector. - type: string - optional: - description: |- - If true, don't block pod startup if the referenced ClusterTrustBundle(s) - aren't available. If using name, then the named ClusterTrustBundle is - allowed not to exist. If using signerName, then the combination of - signerName and labelSelector is allowed to match zero - ClusterTrustBundles. - type: boolean - path: - description: Relative path from the volume - root to write the bundle. - type: string - signerName: - description: |- - Select all ClusterTrustBundles that match this signer name. - Mutually-exclusive with name. The contents of all selected - ClusterTrustBundles will be unified and deduplicated. - type: string - required: - - path - type: object - configMap: - description: configMap information about the - configMap data to project - properties: - items: - description: |- - items if unspecified, each key-value pair in the Data field of the referenced - ConfigMap will be projected into the volume as a file whose name is the - key and content is the value. If specified, the listed keys will be - projected into the specified paths, and unlisted keys will not be - present. If a key is specified which is not present in the ConfigMap, - the volume setup will error unless it is marked optional. Paths must be - relative and may not contain the '..' path or start with '..'. - items: - description: Maps a string key to a - path within a volume. - properties: - key: - description: key is the key to project. - type: string - mode: - description: |- - mode is Optional: mode bits used to set permissions on this file. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - If not specified, the volume defaultMode will be used. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - path: - description: |- - path is the relative path of the file to map the key to. - May not be an absolute path. - May not contain the path element '..'. - May not start with the string '..'. - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - optional: - description: optional specify whether - the ConfigMap or its keys must be defined - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - description: downwardAPI information about - the downwardAPI data to project - properties: - items: - description: Items is a list of DownwardAPIVolume - file - items: - description: DownwardAPIVolumeFile represents - information to create the file containing - the pod field - properties: - fieldRef: - description: 'Required: Selects - a field of the pod: only annotations, - labels, name, namespace and uid - are supported.' - properties: - apiVersion: - description: Version of the - schema the FieldPath is written - in terms of, defaults to "v1". - type: string - fieldPath: - description: Path of the field - to select in the specified - API version. - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - description: |- - Optional: mode bits used to set permissions on this file, must be an octal value - between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - If not specified, the volume defaultMode will be used. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - path: - description: 'Required: Path is the - relative path name of the file - to be created. Must not be absolute - or contain the ''..'' path. Must - be utf-8 encoded. The first item - of the relative path must not - start with ''..''' - type: string - resourceFieldRef: - description: |- - Selects a resource of the container: only resources limits and requests - (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. - properties: - containerName: - description: 'Container name: - required for volumes, optional - for env vars' - type: string - divisor: - anyOf: - - type: integer - - type: string - description: Specifies the output - format of the exposed resources, - defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource - to select' - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - x-kubernetes-list-type: atomic - type: object - secret: - description: secret information about the - secret data to project - properties: - items: - description: |- - items if unspecified, each key-value pair in the Data field of the referenced - Secret will be projected into the volume as a file whose name is the - key and content is the value. If specified, the listed keys will be - projected into the specified paths, and unlisted keys will not be - present. If a key is specified which is not present in the Secret, - the volume setup will error unless it is marked optional. Paths must be - relative and may not contain the '..' path or start with '..'. - items: - description: Maps a string key to a - path within a volume. - properties: - key: - description: key is the key to project. - type: string - mode: - description: |- - mode is Optional: mode bits used to set permissions on this file. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - If not specified, the volume defaultMode will be used. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - path: - description: |- - path is the relative path of the file to map the key to. - May not be an absolute path. - May not contain the path element '..'. - May not start with the string '..'. - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - optional: - description: optional field specify whether - the Secret or its key must be defined - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - description: serviceAccountToken is information - about the serviceAccountToken data to project - properties: - audience: - description: |- - audience is the intended audience of the token. A recipient of a token - must identify itself with an identifier specified in the audience of the - token, and otherwise should reject the token. The audience defaults to the - identifier of the apiserver. - type: string - expirationSeconds: - description: |- - expirationSeconds is the requested duration of validity of the service - account token. As the token approaches expiration, the kubelet volume - plugin will proactively rotate the service account token. The kubelet will - start trying to rotate the token if the token is older than 80 percent of - its time to live or if the token is older than 24 hours.Defaults to 1 hour - and must be at least 10 minutes. - format: int64 - type: integer - path: - description: |- - path is the path relative to the mount point of the file to project the - token into. - type: string - required: - - path - type: object - type: object - type: array - x-kubernetes-list-type: atomic - type: object - quobyte: - description: quobyte represents a Quobyte mount on the - host that shares a pod's lifetime - properties: - group: - description: |- - group to map volume access to - Default is no group - type: string - readOnly: - description: |- - readOnly here will force the Quobyte volume to be mounted with read-only permissions. - Defaults to false. - type: boolean - registry: - description: |- - registry represents a single or multiple Quobyte Registry services - specified as a string as host:port pair (multiple entries are separated with commas) - which acts as the central registry for volumes - type: string - tenant: - description: |- - tenant owning the given Quobyte volume in the Backend - Used with dynamically provisioned Quobyte volumes, value is set by the plugin - type: string - user: - description: |- - user to map volume access to - Defaults to serivceaccount user - type: string - volume: - description: volume is a string that references - an already created Quobyte volume by name. - type: string - required: - - registry - - volume - type: object - rbd: - description: |- - rbd represents a Rados Block Device mount on the host that shares a pod's lifetime. - More info: https://examples.k8s.io/volumes/rbd/README.md - properties: - fsType: - description: |- - fsType is the filesystem type of the volume that you want to mount. - Tip: Ensure that the filesystem type is supported by the host operating system. - Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd - type: string - image: - description: |- - image is the rados image name. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it - type: string - keyring: - default: /etc/ceph/keyring - description: |- - keyring is the path to key ring for RBDUser. - Default is /etc/ceph/keyring. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it - type: string - monitors: - description: |- - monitors is a collection of Ceph monitors. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it - items: - type: string - type: array - x-kubernetes-list-type: atomic - pool: - default: rbd - description: |- - pool is the rados pool name. - Default is rbd. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it - type: string - readOnly: - description: |- - readOnly here will force the ReadOnly setting in VolumeMounts. - Defaults to false. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it - type: boolean - secretRef: - description: |- - secretRef is name of the authentication secret for RBDUser. If provided - overrides keyring. - Default is nil. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - user: - default: admin - description: |- - user is the rados user name. - Default is admin. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it - type: string - required: - - image - - monitors - type: object - scaleIO: - description: scaleIO represents a ScaleIO persistent - volume attached and mounted on Kubernetes nodes. - properties: - fsType: - default: xfs - description: |- - fsType is the filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs", "ntfs". - Default is "xfs". - type: string - gateway: - description: gateway is the host address of the - ScaleIO API Gateway. - type: string - protectionDomain: - description: protectionDomain is the name of the - ScaleIO Protection Domain for the configured storage. - type: string - readOnly: - description: |- - readOnly Defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - type: boolean - secretRef: - description: |- - secretRef references to the secret for ScaleIO user and other - sensitive information. If this is not provided, Login operation will fail. - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - description: sslEnabled Flag enable/disable SSL - communication with Gateway, default false - type: boolean - storageMode: - default: ThinProvisioned - description: |- - storageMode indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. - Default is ThinProvisioned. - type: string - storagePool: - description: storagePool is the ScaleIO Storage - Pool associated with the protection domain. - type: string - system: - description: system is the name of the storage system - as configured in ScaleIO. - type: string - volumeName: - description: |- - volumeName is the name of a volume already created in the ScaleIO system - that is associated with this volume source. - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - description: |- - secret represents a secret that should populate this volume. - More info: https://kubernetes.io/docs/concepts/storage/volumes#secret - properties: - defaultMode: - description: |- - defaultMode is Optional: mode bits used to set permissions on created files by default. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values - for mode bits. Defaults to 0644. - Directories within the path are not affected by this setting. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - items: - description: |- - items If unspecified, each key-value pair in the Data field of the referenced - Secret will be projected into the volume as a file whose name is the - key and content is the value. If specified, the listed keys will be - projected into the specified paths, and unlisted keys will not be - present. If a key is specified which is not present in the Secret, - the volume setup will error unless it is marked optional. Paths must be - relative and may not contain the '..' path or start with '..'. - items: - description: Maps a string key to a path within - a volume. - properties: - key: - description: key is the key to project. - type: string - mode: - description: |- - mode is Optional: mode bits used to set permissions on this file. - Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. - YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. - If not specified, the volume defaultMode will be used. - This might be in conflict with other options that affect the file - mode, like fsGroup, and the result can be other mode bits set. - format: int32 - type: integer - path: - description: |- - path is the relative path of the file to map the key to. - May not be an absolute path. - May not contain the path element '..'. - May not start with the string '..'. - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - optional: - description: optional field specify whether the - Secret or its keys must be defined - type: boolean - secretName: - description: |- - secretName is the name of the secret in the pod's namespace to use. - More info: https://kubernetes.io/docs/concepts/storage/volumes#secret - type: string - type: object - storageos: - description: storageOS represents a StorageOS volume - attached and mounted on Kubernetes nodes. - properties: - fsType: - description: |- - fsType is the filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - type: string - readOnly: - description: |- - readOnly defaults to false (read/write). ReadOnly here will force - the ReadOnly setting in VolumeMounts. - type: boolean - secretRef: - description: |- - secretRef specifies the secret to use for obtaining the StorageOS API - credentials. If not specified, default values will be attempted. - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - description: |- - volumeName is the human-readable name of the StorageOS volume. Volume - names are only unique within a namespace. - type: string - volumeNamespace: - description: |- - volumeNamespace specifies the scope of the volume within StorageOS. If no - namespace is specified then the Pod's namespace will be used. This allows the - Kubernetes name scoping to be mirrored within StorageOS for tighter integration. - Set VolumeName to any name to override the default behaviour. - Set to "default" if you are not using namespaces within StorageOS. - Namespaces that do not pre-exist within StorageOS will be created. - type: string - type: object - vsphereVolume: - description: vsphereVolume represents a vSphere volume - attached and mounted on kubelets host machine - properties: - fsType: - description: |- - fsType is filesystem type to mount. - Must be a filesystem type supported by the host operating system. - Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - type: string - storagePolicyID: - description: storagePolicyID is the storage Policy - Based Management (SPBM) profile ID associated - with the StoragePolicyName. - type: string - storagePolicyName: - description: storagePolicyName is the storage Policy - Based Management (SPBM) profile name. - type: string - volumePath: - description: volumePath is the path that identifies - vSphere volume vmdk - type: string - required: - - volumePath - type: object - required: - - name - type: object - type: array - xdsAddress: - description: The customized XDS address to retrieve configuration. - type: string - type: object - type: object - version: - default: v1.24.1 - description: |- - Defines the version of Istio to install. - Must be one of: v1.24.1. - enum: - - v1.24.1 - type: string - required: - - namespace - - version - type: object - status: - description: ZTunnelStatus defines the observed state of ZTunnel - properties: - conditions: - description: Represents the latest available observations of the object's - current state. - items: - description: ZTunnelCondition represents a specific observation - of the ZTunnel object's state. - properties: - 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 - the last transition. - type: string - reason: - description: Unique, single-word, CamelCase reason for the condition's - last transition. - type: string - status: - description: The status of this condition. Can be True, False - or Unknown. - type: string - type: - description: The type of this condition. - type: string - type: object - type: array - observedGeneration: - description: |- - ObservedGeneration is the most recent generation observed for this - ZTunnel object. It corresponds to the object's generation, which is - updated on mutation by the API Server. The information in the status - pertains to this particular generation of the object. - format: int64 - type: integer - state: - description: Reports the current state of the object. - type: string - type: object - type: object - x-kubernetes-validations: - - message: metadata.name must be 'default' - rule: self.metadata.name == 'default' - served: true - storage: true - subresources: - status: {} diff --git a/docs/api-reference/sailoperator.io.md b/docs/api-reference/sailoperator.io.md index d544d9071..67a0bb1f2 100644 --- a/docs/api-reference/sailoperator.io.md +++ b/docs/api-reference/sailoperator.io.md @@ -17,8 +17,6 @@ Package v1alpha1 contains API Schema definitions for the sailoperator.io v1alpha - [IstioRevisionList](#istiorevisionlist) - [IstioRevisionTag](#istiorevisiontag) - [IstioRevisionTagList](#istiorevisiontaglist) -- [ZTunnel](#ztunnel) -- [ZTunnelList](#ztunnellist) @@ -435,8 +433,6 @@ _Appears in:_ - [CNIConfig](#cniconfig) - [CNIGlobalConfig](#cniglobalconfig) - [GlobalConfig](#globalconfig) -- [ZTunnelConfig](#ztunnelconfig) -- [ZTunnelGlobalConfig](#ztunnelglobalconfig) | Field | Description | Default | Validation | | --- | --- | --- | --- | @@ -1265,7 +1261,6 @@ MeshConfig defines mesh-wide settings for the Istio service mesh. _Appears in:_ - [Values](#values) -- [ZTunnelConfig](#ztunnelconfig) | Field | Description | Default | Validation | | --- | --- | --- | --- | @@ -2089,7 +2084,6 @@ MultiClusterConfig specifies the Configuration for Istio mesh across multiple cl _Appears in:_ - [GlobalConfig](#globalconfig) -- [ZTunnelConfig](#ztunnelconfig) | Field | Description | Default | Validation | | --- | --- | --- | --- | @@ -3119,221 +3113,5 @@ _Appears in:_ -#### ZTunnel - - - -ZTunnel represents a deployment of the Istio ztunnel component. - - - -_Appears in:_ -- [ZTunnelList](#ztunnellist) - -| Field | Description | Default | Validation | -| --- | --- | --- | --- | -| `apiVersion` _string_ | `sailoperator.io/v1alpha1` | | | -| `kind` _string_ | `ZTunnel` | | | -| `kind` _string_ | 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 | | | -| `apiVersion` _string_ | 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 | | | -| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | -| `spec` _[ZTunnelSpec](#ztunnelspec)_ | | \{ namespace:ztunnel profile:ambient version:v1.24.0 \} | | -| `status` _[ZTunnelStatus](#ztunnelstatus)_ | | | | - - -#### ZTunnelCondition - - - -ZTunnelCondition represents a specific observation of the ZTunnel object's state. - - - -_Appears in:_ -- [ZTunnelStatus](#ztunnelstatus) - -| Field | Description | Default | Validation | -| --- | --- | --- | --- | -| `type` _[ZTunnelConditionType](#ztunnelconditiontype)_ | The type of this condition. | | | -| `status` _[ConditionStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#conditionstatus-v1-meta)_ | The status of this condition. Can be True, False or Unknown. | | | -| `reason` _[ZTunnelConditionReason](#ztunnelconditionreason)_ | Unique, single-word, CamelCase reason for the condition's last transition. | | | -| `message` _string_ | Human-readable message indicating details about the last transition. | | | -| `lastTransitionTime` _[Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#time-v1-meta)_ | Last time the condition transitioned from one status to another. | | | - - -#### ZTunnelConditionReason - -_Underlying type:_ _string_ - -ZTunnelConditionReason represents a short message indicating how the condition came -to be in its present state. - - - -_Appears in:_ -- [ZTunnelCondition](#ztunnelcondition) -- [ZTunnelStatus](#ztunnelstatus) - -| Field | Description | -| --- | --- | -| `ReconcileError` | ZTunnelReasonReconcileError indicates that the reconciliation of the resource has failed, but will be retried. | -| `DaemonSetNotReady` | ZTunnelDaemonSetNotReady indicates that the ztunnel DaemonSet is not ready. | -| `ReadinessCheckFailed` | ZTunnelReasonReadinessCheckFailed indicates that the DaemonSet readiness status could not be ascertained. | -| `Healthy` | ZTunnelReasonHealthy indicates that the control plane is fully reconciled and that all components are ready. | - - -#### ZTunnelConditionType - -_Underlying type:_ _string_ - -ZTunnelConditionType represents the type of the condition. Condition stages are: -Installed, Reconciled, Ready - - - -_Appears in:_ -- [ZTunnelCondition](#ztunnelcondition) - -| Field | Description | -| --- | --- | -| `Reconciled` | ZTunnelConditionReconciled signifies whether the controller has successfully reconciled the resources defined through the CR. | -| `Ready` | ZTunnelConditionReady signifies whether the ztunnel DaemonSet is ready. | - - -#### ZTunnelConfig - - - -Configuration for ztunnel. - - - -_Appears in:_ -- [ZTunnelValues](#ztunnelvalues) - -| Field | Description | Default | Validation | -| --- | --- | --- | --- | -| `hub` _string_ | Hub to pull the container image from. Image will be `Hub/Image:Tag-Variant`. | | | -| `tag` _string_ | The container image tag to pull. Image will be `Hub/Image:Tag-Variant`. | | | -| `variant` _string_ | The container image variant to pull. Options are "debug" or "distroless". Unset will use the default for the given version. | | | -| `image` _string_ | Image name to pull from. Image will be `Hub/Image:Tag-Variant`. If Image contains a "/", it will replace the entire `image` in the pod. | | | -| `Annotations` _object (keys:string, values:string)_ | Annotations to apply to all top level resources | | | -| `Labels` _object (keys:string, values:string)_ | Labels to apply to all top level resources | | | -| `volumeMounts` _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#volumemount-v1-core) array_ | Additional volumeMounts to the ztunnel container | | | -| `volumes` _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#volume-v1-core) array_ | Additional volumes to add to the ztunnel Pod. | | | -| `podAnnotations` _object (keys:string, values:string)_ | Annotations added to each pod. The default annotations are required for scraping prometheus (in most environments). | | | -| `podLabels` _object (keys:string, values:string)_ | Additional labels to apply on the pod level. | | | -| `resources` _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#resourcerequirements-v1-core)_ | The k8s resource requests and limits for the ztunnel Pods. | | | -| `imagePullSecrets` _string array_ | List of secret names to add to the service account as image pull secrets to use for pulling any images in pods that reference this ServiceAccount. Must be set for any cluster configured with private docker registry. | | | -| `env` _object (keys:string, values:string)_ | A `key: value` mapping of environment variables to add to the pod | | | -| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#pullpolicy-v1-core)_ | Specifies the image pull policy for the Istio images. one of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images | | Enum: [Always Never IfNotPresent] | -| `multiCluster` _[MultiClusterConfig](#multiclusterconfig)_ | Settings for multicluster. The name of the cluster we are installing in. Note this is a user-defined name, which must be consistent with Istiod configuration. | | | -| `meshConfig` _[MeshConfig](#meshconfig)_ | meshConfig defines runtime configuration of components. For ztunnel, only defaultConfig is used, but this is nested under `meshConfig` for consistency with other components. | | | -| `revision` _string_ | Configures the revision this control plane is a part of | | | -| `caAddress` _string_ | The address of the CA for CSR. | | | -| `xdsAddress` _string_ | The customized XDS address to retrieve configuration. | | | -| `istioNamespace` _string_ | Specifies the default namespace for the Istio control plane components. | | | -| `logging` _[GlobalLoggingConfig](#globalloggingconfig)_ | Same as `global.logging.level`, but will override it if set | | | -| `logAsJSON` _boolean_ | Specifies whether istio components should output logs in json format by adding --log_as_json argument to each container. | | | - - -#### ZTunnelGlobalConfig - - - -ZTunnelGlobalConfig is a subset of the Global Configuration used in the Istio ztunnel chart. - - - -_Appears in:_ -- [ZTunnelValues](#ztunnelvalues) - -| Field | Description | Default | Validation | -| --- | --- | --- | --- | -| `defaultResources` _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#resourcerequirements-v1-core)_ | See https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container Deprecated: Marked as deprecated in pkg/apis/values_types.proto. | | | -| `hub` _string_ | Specifies the docker hub for Istio images. | | | -| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#pullpolicy-v1-core)_ | Specifies the image pull policy for the Istio images. one of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images | | Enum: [Always Never IfNotPresent] | -| `imagePullSecrets` _string array_ | ImagePullSecrets for the control plane ServiceAccount, list of secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. Must be set for any cluster configured with private docker registry. | | | -| `logAsJSON` _boolean_ | Specifies whether istio components should output logs in json format by adding --log_as_json argument to each container. | | | -| `logging` _[GlobalLoggingConfig](#globalloggingconfig)_ | Specifies the global logging level settings for the Istio control plane components. | | | -| `tag` _string_ | Specifies the tag for the Istio docker images. | | | -| `variant` _string_ | The variant of the Istio container images to use. Options are "debug" or "distroless". Unset will use the default for the given version. | | | -| `platform` _string_ | Platform in which Istio is deployed. Possible values are: "openshift" and "gcp" An empty value means it is a vanilla Kubernetes distribution, therefore no special treatment will be considered. | | | - - -#### ZTunnelList - - - -ZTunnelList contains a list of ZTunnel - - - - - -| Field | Description | Default | Validation | -| --- | --- | --- | --- | -| `apiVersion` _string_ | `sailoperator.io/v1alpha1` | | | -| `kind` _string_ | `ZTunnelList` | | | -| `kind` _string_ | 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 | | | -| `apiVersion` _string_ | 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 | | | -| `metadata` _[ListMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#listmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | -| `items` _[ZTunnel](#ztunnel) array_ | | | | - - -#### ZTunnelSpec - - - -ZTunnelSpec defines the desired state of ZTunnel - - - -_Appears in:_ -- [ZTunnel](#ztunnel) - -| Field | Description | Default | Validation | -| --- | --- | --- | --- | -| `version` _string_ | Defines the version of Istio to install. Must be one of: v1.24.1. | v1.24.1 | Enum: [v1.24.1] | -| `profile` _string_ | The built-in installation configuration profile to use. The 'default' profile is 'ambient' and it is always applied. Must be one of: ambient, default, demo, empty, external, preview, remote, stable. | ambient | Enum: [ambient default demo empty external openshift-ambient openshift preview remote stable] | -| `namespace` _string_ | Namespace to which the Istio ztunnel component should be installed. | ztunnel | | -| `values` _[ZTunnelValues](#ztunnelvalues)_ | Defines the values to be passed to the Helm charts when installing Istio ztunnel. | | | - - -#### ZTunnelStatus - - - -ZTunnelStatus defines the observed state of ZTunnel - - - -_Appears in:_ -- [ZTunnel](#ztunnel) - -| Field | Description | Default | Validation | -| --- | --- | --- | --- | -| `observedGeneration` _integer_ | ObservedGeneration is the most recent generation observed for this ZTunnel object. It corresponds to the object's generation, which is updated on mutation by the API Server. The information in the status pertains to this particular generation of the object. | | | -| `conditions` _[ZTunnelCondition](#ztunnelcondition) array_ | Represents the latest available observations of the object's current state. | | | -| `state` _[ZTunnelConditionReason](#ztunnelconditionreason)_ | Reports the current state of the object. | | | - - -#### ZTunnelValues - - - - - - - -_Appears in:_ -- [ZTunnelSpec](#ztunnelspec) - -| Field | Description | Default | Validation | -| --- | --- | --- | --- | -| `ztunnel` _[ZTunnelConfig](#ztunnelconfig)_ | Configuration for the Istio ztunnel plugin. | | | -| `global` _[ZTunnelGlobalConfig](#ztunnelglobalconfig)_ | Part of the global configuration applicable to the Istio ztunnel component. | | | - -