blob: 31c80ff7715388d1c167bc123518c64e695d119b [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you 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 v2
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// ApisixTlsSpec defines configurations for TLS and mutual TLS.
type ApisixTlsSpec struct {
// IngressClassName specifies which IngressClass this resource is associated with.
// The APISIX controller only processes this resource if the class matches its own.
IngressClassName string `json:"ingressClassName,omitempty" yaml:"ingressClassName,omitempty"`
// Hosts lists the SNI (Server Name Indication) hostnames that this TLS configuration applies to.
// Must contain at least one host.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
Hosts []HostType `json:"hosts" yaml:"hosts,omitempty"`
// Secret refers to the Kubernetes TLS secret containing the certificate and private key.
// This secret must exist in the specified namespace and contain valid TLS data.
// +kubebuilder:validation:Required
Secret ApisixSecret `json:"secret" yaml:"secret"`
// Client defines mutual TLS (mTLS) settings, such as the CA certificate and verification depth.
Client *ApisixMutualTlsClientConfig `json:"client,omitempty" yaml:"client,omitempty"`
}
// ApisixTlsStatus defines the observed state of ApisixTls.
type ApisixTlsStatus = ApisixStatus
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// +kubebuilder:resource:shortName=atls,path=apisixtlses
// +kubebuilder:printcolumn:name="SNIs",type=string,JSONPath=`.spec.hosts`
// +kubebuilder:printcolumn:name="Secret Name",type=string,JSONPath=`.spec.secret.name`
// +kubebuilder:printcolumn:name="Secret Namespace",type=string,JSONPath=`.spec.secret.namespace`
// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`
// +kubebuilder:printcolumn:name="Client CA Secret Name",type=string,JSONPath=`.spec.client.ca.name`
// +kubebuilder:printcolumn:name="Client CA Secret Namespace",type=string,JSONPath=`.spec.client.ca.namespace`
// ApisixTls defines configuration for TLS and mutual TLS (mTLS).
type ApisixTls struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
// ApisixTlsSpec defines the TLS configuration.
Spec ApisixTlsSpec `json:"spec,omitempty"`
Status ApisixTlsStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
// ApisixTlsList contains a list of ApisixTls.
type ApisixTlsList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ApisixTls `json:"items"`
}
// +kubebuilder:validation:Pattern="^\\*?[0-9a-zA-Z-.]+$"
type HostType string
// ApisixSecret describes a reference to a Kubernetes Secret, including its name and namespace.
// This is used to locate secrets such as certificates or credentials for plugins or TLS configuration.
type ApisixSecret struct {
// Name is the name of the Kubernetes Secret.
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:Required
Name string `json:"name" yaml:"name"`
// Namespace is the namespace where the Kubernetes Secret is located.
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:Required
Namespace string `json:"namespace" yaml:"namespace"`
}
// ApisixMutualTlsClientConfig describes the mutual TLS CA and verification settings.
type ApisixMutualTlsClientConfig struct {
// CASecret references the secret containing the CA certificate for client certificate validation.
CASecret ApisixSecret `json:"caSecret,omitempty" yaml:"caSecret,omitempty"`
// Depth specifies the maximum verification depth for the client certificate chain.
Depth int `json:"depth,omitempty" yaml:"depth,omitempty"`
// SkipMTLSUriRegex contains RegEx patterns for URIs to skip mutual TLS verification.
SkipMTLSUriRegex []string `json:"skip_mtls_uri_regex,omitempty" yaml:"skip_mtls_uri_regex,omitempty"`
}
func init() {
SchemeBuilder.Register(&ApisixTls{}, &ApisixTlsList{})
}