-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
1,222 additions
and
61 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
/* | ||
Copyright 2020 The Kubernetes 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 v1 contains API Schema definitions for the gateway.networking.k8s.io | ||
// API group. | ||
// | ||
// +kubebuilder:object:generate=true | ||
// +groupName=gateway.networking.k8s.io | ||
package v1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,165 @@ | ||
/* | ||
Copyright 2020 The Kubernetes 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 v1 | ||
|
||
import ( | ||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
"sigs.k8s.io/gateway-api/apis/v1beta1" | ||
) | ||
|
||
// +genclient | ||
// +kubebuilder:object:root=true | ||
// +kubebuilder:resource:categories=gateway-api,shortName=gtw | ||
// +kubebuilder:subresource:status | ||
// +kubebuilder:printcolumn:name="Class",type=string,JSONPath=`.spec.gatewayClassName` | ||
// +kubebuilder:printcolumn:name="Address",type=string,JSONPath=`.status.addresses[*].value` | ||
// +kubebuilder:printcolumn:name="Programmed",type=string,JSONPath=`.status.conditions[?(@.type=="Programmed")].status` | ||
// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` | ||
|
||
// Gateway represents an instance of a service-traffic handling infrastructure | ||
// by binding Listeners to a set of IP addresses. | ||
type Gateway v1beta1.Gateway | ||
|
||
// +kubebuilder:object:root=true | ||
|
||
// GatewayList contains a list of Gateways. | ||
type GatewayList struct { | ||
metav1.TypeMeta `json:",inline"` | ||
metav1.ListMeta `json:"metadata,omitempty"` | ||
Items []Gateway `json:"items"` | ||
} | ||
|
||
// GatewaySpec defines the desired state of Gateway. | ||
// | ||
// Not all possible combinations of options specified in the Spec are | ||
// valid. Some invalid configurations can be caught synchronously via a | ||
// webhook, but there are many cases that will require asynchronous | ||
// signaling via the GatewayStatus block. | ||
// +k8s:deepcopy-gen=false | ||
type GatewaySpec = v1beta1.GatewaySpec | ||
|
||
// Listener embodies the concept of a logical endpoint where a Gateway accepts | ||
// network connections. | ||
// +k8s:deepcopy-gen=false | ||
type Listener = v1beta1.Listener | ||
|
||
// ProtocolType defines the application protocol accepted by a Listener. | ||
// Implementations are not required to accept all the defined protocols. If an | ||
// implementation does not support a specified protocol, it MUST set the | ||
// "Accepted" condition to False for the affected Listener with a reason of | ||
// "UnsupportedProtocol". | ||
// | ||
// Core ProtocolType values are listed in the table below. | ||
// | ||
// Implementations can define their own protocols if a core ProtocolType does not | ||
// exist. Such definitions must use prefixed name, such as | ||
// `mycompany.com/my-custom-protocol`. Un-prefixed names are reserved for core | ||
// protocols. Any protocol defined by implementations will fall under | ||
// implementation-specific conformance. | ||
// | ||
// Valid values include: | ||
// | ||
// * "HTTP" - Core support | ||
// * "example.com/bar" - Implementation-specific support | ||
// | ||
// Invalid values include: | ||
// | ||
// * "example.com" - must include path if domain is used | ||
// * "foo.example.com" - must include path if domain is used | ||
// | ||
// +kubebuilder:validation:MinLength=1 | ||
// +kubebuilder:validation:MaxLength=255 | ||
// +kubebuilder:validation:Pattern=`^[a-zA-Z0-9]([-a-zSA-Z0-9]*[a-zA-Z0-9])?$|[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9]+$` | ||
// +k8s:deepcopy-gen=false | ||
type ProtocolType = v1beta1.ProtocolType | ||
|
||
// GatewayTLSConfig describes a TLS configuration. | ||
// +k8s:deepcopy-gen=false | ||
type GatewayTLSConfig = v1beta1.GatewayTLSConfig | ||
|
||
// TLSModeType type defines how a Gateway handles TLS sessions. | ||
// | ||
// Note that values may be added to this enum, implementations | ||
// must ensure that unknown values will not cause a crash. | ||
// | ||
// Unknown values here must result in the implementation setting the | ||
// Ready Condition for the Listener to `status: False`, with a | ||
// Reason of `Invalid`. | ||
// | ||
// +kubebuilder:validation:Enum=Terminate;Passthrough | ||
// +k8s:deepcopy-gen=false | ||
type TLSModeType = v1beta1.TLSModeType | ||
|
||
// AllowedRoutes defines which Routes may be attached to this Listener. | ||
// +k8s:deepcopy-gen=false | ||
type AllowedRoutes = v1beta1.AllowedRoutes | ||
|
||
// FromNamespaces specifies namespace from which Routes may be attached to a | ||
// Gateway. | ||
// | ||
// Note that values may be added to this enum, implementations | ||
// must ensure that unknown values will not cause a crash. | ||
// | ||
// Unknown values here must result in the implementation setting the | ||
// Ready Condition for the Listener to `status: False`, with a | ||
// Reason of `Invalid`. | ||
// | ||
// +kubebuilder:validation:Enum=All;Selector;Same | ||
// +k8s:deepcopy-gen=false | ||
type FromNamespaces = v1beta1.FromNamespaces | ||
|
||
// RouteNamespaces indicate which namespaces Routes should be selected from. | ||
// +k8s:deepcopy-gen=false | ||
type RouteNamespaces = v1beta1.RouteNamespaces | ||
|
||
// RouteGroupKind indicates the group and kind of a Route resource. | ||
// +k8s:deepcopy-gen=false | ||
type RouteGroupKind = v1beta1.RouteGroupKind | ||
|
||
// GatewayAddress describes an address that can be bound to a Gateway. | ||
// +k8s:deepcopy-gen=false | ||
type GatewayAddress = v1beta1.GatewayAddress | ||
|
||
// GatewayStatus defines the observed state of Gateway. | ||
// +k8s:deepcopy-gen=false | ||
type GatewayStatus = v1beta1.GatewayStatus | ||
|
||
// GatewayConditionType is a type of condition associated with a | ||
// Gateway. This type should be used with the GatewayStatus.Conditions | ||
// field. | ||
// +k8s:deepcopy-gen=false | ||
type GatewayConditionType = v1beta1.GatewayConditionType | ||
|
||
// GatewayConditionReason defines the set of reasons that explain why a | ||
// particular Gateway condition type has been raised. | ||
// +k8s:deepcopy-gen=false | ||
type GatewayConditionReason = v1beta1.GatewayConditionReason | ||
|
||
// ListenerStatus is the status associated with a Listener. | ||
// +k8s:deepcopy-gen=false | ||
type ListenerStatus = v1beta1.ListenerStatus | ||
|
||
// ListenerConditionType is a type of condition associated with the | ||
// listener. This type should be used with the ListenerStatus.Conditions | ||
// field. | ||
// +k8s:deepcopy-gen=false | ||
type ListenerConditionType = v1beta1.ListenerConditionType | ||
|
||
// ListenerConditionReason defines the set of reasons that explain | ||
// why a particular Listener condition type has been raised. | ||
// +k8s:deepcopy-gen=false | ||
type ListenerConditionReason = v1beta1.ListenerConditionReason |
84 changes: 84 additions & 0 deletions
84
src/apiserver/pkg/apis/gatewayapi/v1/gatewayclass_types.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
/* | ||
Copyright 2020 The Kubernetes 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 v1 | ||
|
||
import ( | ||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
"sigs.k8s.io/gateway-api/apis/v1beta1" | ||
) | ||
|
||
// +genclient | ||
// +genclient:nonNamespaced | ||
// +kubebuilder:object:root=true | ||
// +kubebuilder:resource:categories=gateway-api,scope=Cluster,shortName=gc | ||
// +kubebuilder:subresource:status | ||
// +kubebuilder:printcolumn:name="Controller",type=string,JSONPath=`.spec.controllerName` | ||
// +kubebuilder:printcolumn:name="Accepted",type=string,JSONPath=`.status.conditions[?(@.type=="Accepted")].status` | ||
// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` | ||
// +kubebuilder:printcolumn:name="Description",type=string,JSONPath=`.spec.description`,priority=1 | ||
|
||
// GatewayClass describes a class of Gateways available to the user for creating | ||
// Gateway resources. | ||
// | ||
// It is recommended that this resource be used as a template for Gateways. This | ||
// means that a Gateway is based on the state of the GatewayClass at the time it | ||
// was created and changes to the GatewayClass or associated parameters are not | ||
// propagated down to existing Gateways. This recommendation is intended to | ||
// limit the blast radius of changes to GatewayClass or associated parameters. | ||
// If implementations choose to propagate GatewayClass changes to existing | ||
// Gateways, that MUST be clearly documented by the implementation. | ||
// | ||
// Whenever one or more Gateways are using a GatewayClass, implementations SHOULD | ||
// add the `gateway-exists-finalizer.gateway.networking.k8s.io` finalizer on the | ||
// associated GatewayClass. This ensures that a GatewayClass associated with a | ||
// Gateway is not deleted while in use. | ||
// | ||
// GatewayClass is a Cluster level resource. | ||
type GatewayClass v1beta1.GatewayClass | ||
|
||
// +kubebuilder:object:root=true | ||
|
||
// GatewayClassList contains a list of GatewayClass | ||
type GatewayClassList struct { | ||
metav1.TypeMeta `json:",inline"` | ||
metav1.ListMeta `json:"metadata,omitempty"` | ||
Items []GatewayClass `json:"items"` | ||
} | ||
|
||
// GatewayClassSpec reflects the configuration of a class of Gateways. | ||
// +k8s:deepcopy-gen=false | ||
type GatewayClassSpec = v1beta1.GatewayClassSpec | ||
|
||
// ParametersReference identifies an API object containing controller-specific | ||
// configuration resource within the cluster. | ||
// +k8s:deepcopy-gen=false | ||
type ParametersReference = v1beta1.ParametersReference | ||
|
||
// GatewayClassConditionType is the type for status conditions on | ||
// Gateway resources. This type should be used with the | ||
// GatewayClassStatus.Conditions field. | ||
// +k8s:deepcopy-gen=false | ||
type GatewayClassConditionType = v1beta1.GatewayClassConditionType | ||
|
||
// GatewayClassConditionReason defines the set of reasons that explain why a | ||
// particular GatewayClass condition type has been raised. | ||
// +k8s:deepcopy-gen=false | ||
type GatewayClassConditionReason = v1beta1.GatewayClassConditionReason | ||
|
||
// GatewayClassStatus is the current status for the GatewayClass. | ||
// +k8s:deepcopy-gen=false | ||
type GatewayClassStatus = v1beta1.GatewayClassStatus |
Oops, something went wrong.