mirror of https://github.com/k3s-io/k3s
Add networking.k8s.io/v1beta1 Ingress
parent
6c0b1b87f0
commit
8c28d3f63c
|
@ -258,6 +258,7 @@ var apiVersionPriorities = map[schema.GroupVersion]priority{
|
||||||
{Group: "batch", Version: "v2alpha1"}: {group: 17400, version: 9},
|
{Group: "batch", Version: "v2alpha1"}: {group: 17400, version: 9},
|
||||||
{Group: "certificates.k8s.io", Version: "v1beta1"}: {group: 17300, version: 9},
|
{Group: "certificates.k8s.io", Version: "v1beta1"}: {group: 17300, version: 9},
|
||||||
{Group: "networking.k8s.io", Version: "v1"}: {group: 17200, version: 15},
|
{Group: "networking.k8s.io", Version: "v1"}: {group: 17200, version: 15},
|
||||||
|
{Group: "networking.k8s.io", Version: "v1beta1"}: {group: 17200, version: 9},
|
||||||
{Group: "policy", Version: "v1beta1"}: {group: 17100, version: 9},
|
{Group: "policy", Version: "v1beta1"}: {group: 17100, version: 9},
|
||||||
{Group: "rbac.authorization.k8s.io", Version: "v1"}: {group: 17000, version: 15},
|
{Group: "rbac.authorization.k8s.io", Version: "v1"}: {group: 17000, version: 15},
|
||||||
{Group: "rbac.authorization.k8s.io", Version: "v1beta1"}: {group: 17000, version: 12},
|
{Group: "rbac.authorization.k8s.io", Version: "v1beta1"}: {group: 17000, version: 12},
|
||||||
|
|
|
@ -79,6 +79,7 @@ extensions/v1beta1 \
|
||||||
events.k8s.io/v1beta1 \
|
events.k8s.io/v1beta1 \
|
||||||
imagepolicy.k8s.io/v1alpha1 \
|
imagepolicy.k8s.io/v1alpha1 \
|
||||||
networking.k8s.io/v1 \
|
networking.k8s.io/v1 \
|
||||||
|
networking.k8s.io/v1beta1 \
|
||||||
policy/v1beta1 \
|
policy/v1beta1 \
|
||||||
rbac.authorization.k8s.io/v1 \
|
rbac.authorization.k8s.io/v1 \
|
||||||
rbac.authorization.k8s.io/v1beta1 \
|
rbac.authorization.k8s.io/v1beta1 \
|
||||||
|
|
|
@ -79,6 +79,7 @@ PACKAGES=(
|
||||||
k8s.io/api/admissionregistration/v1beta1
|
k8s.io/api/admissionregistration/v1beta1
|
||||||
k8s.io/api/admission/v1beta1
|
k8s.io/api/admission/v1beta1
|
||||||
k8s.io/api/auditregistration/v1alpha1
|
k8s.io/api/auditregistration/v1alpha1
|
||||||
|
k8s.io/api/networking/v1beta1
|
||||||
k8s.io/api/networking/v1
|
k8s.io/api/networking/v1
|
||||||
k8s.io/metrics/pkg/apis/metrics/v1alpha1
|
k8s.io/metrics/pkg/apis/metrics/v1alpha1
|
||||||
k8s.io/metrics/pkg/apis/metrics/v1beta1
|
k8s.io/metrics/pkg/apis/metrics/v1beta1
|
||||||
|
|
|
@ -24,6 +24,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/apis/networking"
|
"k8s.io/kubernetes/pkg/apis/networking"
|
||||||
"k8s.io/kubernetes/pkg/apis/networking/v1"
|
"k8s.io/kubernetes/pkg/apis/networking/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/networking/v1beta1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -34,5 +35,6 @@ func init() {
|
||||||
func Install(scheme *runtime.Scheme) {
|
func Install(scheme *runtime.Scheme) {
|
||||||
utilruntime.Must(networking.AddToScheme(scheme))
|
utilruntime.Must(networking.AddToScheme(scheme))
|
||||||
utilruntime.Must(v1.AddToScheme(scheme))
|
utilruntime.Must(v1.AddToScheme(scheme))
|
||||||
utilruntime.Must(scheme.SetVersionPriority(v1.SchemeGroupVersion))
|
utilruntime.Must(v1beta1.AddToScheme(scheme))
|
||||||
|
utilruntime.Must(scheme.SetVersionPriority(v1.SchemeGroupVersion, v1beta1.SchemeGroupVersion))
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,8 @@ func addKnownTypes(scheme *runtime.Scheme) error {
|
||||||
scheme.AddKnownTypes(SchemeGroupVersion,
|
scheme.AddKnownTypes(SchemeGroupVersion,
|
||||||
&NetworkPolicy{},
|
&NetworkPolicy{},
|
||||||
&NetworkPolicyList{},
|
&NetworkPolicyList{},
|
||||||
|
&Ingress{},
|
||||||
|
&IngressList{},
|
||||||
)
|
)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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 v1beta1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
func addDefaultingFuncs(scheme *runtime.Scheme) error {
|
||||||
|
return RegisterDefaults(scheme)
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/networking
|
||||||
|
// +k8s:conversion-gen-external-types=k8s.io/api/networking/v1beta1
|
||||||
|
// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/extensions
|
||||||
|
// +k8s:defaulter-gen=TypeMeta
|
||||||
|
// +k8s:defaulter-gen-input=../../../../vendor/k8s.io/api/networking/v1beta1
|
||||||
|
// +groupName=networking.k8s.io
|
||||||
|
|
||||||
|
package v1beta1 // import "k8s.io/kubernetes/pkg/apis/networking/v1beta1"
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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 v1beta1
|
||||||
|
|
||||||
|
import (
|
||||||
|
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GroupName is the group name use in this package
|
||||||
|
const GroupName = "networking.k8s.io"
|
||||||
|
|
||||||
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
|
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"}
|
||||||
|
|
||||||
|
// Resource takes an unqualified resource and returns a Group qualified GroupResource
|
||||||
|
func Resource(resource string) schema.GroupResource {
|
||||||
|
return SchemeGroupVersion.WithResource(resource).GroupResource()
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
localSchemeBuilder = &networkingv1beta1.SchemeBuilder
|
||||||
|
|
||||||
|
// AddToScheme adds the types of this group into the given scheme.
|
||||||
|
AddToScheme = localSchemeBuilder.AddToScheme
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// We only register manually written functions here. The registration of the
|
||||||
|
// generated functions takes place in the generated files. The separation
|
||||||
|
// makes the code compile even when the generated files are missing.
|
||||||
|
localSchemeBuilder.Register(addDefaultingFuncs)
|
||||||
|
}
|
|
@ -98,6 +98,7 @@ func (c *completedStorageFactoryConfig) New() (*serverstorage.DefaultStorageFact
|
||||||
storageFactory.AddCohabitatingResources(apps.Resource("replicasets"), extensions.Resource("replicasets"))
|
storageFactory.AddCohabitatingResources(apps.Resource("replicasets"), extensions.Resource("replicasets"))
|
||||||
storageFactory.AddCohabitatingResources(api.Resource("events"), events.Resource("events"))
|
storageFactory.AddCohabitatingResources(api.Resource("events"), events.Resource("events"))
|
||||||
storageFactory.AddCohabitatingResources(policy.Resource("podsecuritypolicies"), extensions.Resource("podsecuritypolicies"))
|
storageFactory.AddCohabitatingResources(policy.Resource("podsecuritypolicies"), extensions.Resource("podsecuritypolicies"))
|
||||||
|
storageFactory.AddCohabitatingResources(extensions.Resource("ingresses"), networking.Resource("ingresses"))
|
||||||
|
|
||||||
for _, override := range c.EtcdServersOverrides {
|
for _, override := range c.EtcdServersOverrides {
|
||||||
tokens := strings.Split(override, "#")
|
tokens := strings.Split(override, "#")
|
||||||
|
|
|
@ -40,6 +40,7 @@ import (
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
|
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
|
||||||
networkingv1 "k8s.io/api/networking/v1"
|
networkingv1 "k8s.io/api/networking/v1"
|
||||||
|
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
||||||
policyv1beta1 "k8s.io/api/policy/v1beta1"
|
policyv1beta1 "k8s.io/api/policy/v1beta1"
|
||||||
rbacv1 "k8s.io/api/rbac/v1"
|
rbacv1 "k8s.io/api/rbac/v1"
|
||||||
schedulingv1beta1 "k8s.io/api/scheduling/v1beta1"
|
schedulingv1beta1 "k8s.io/api/scheduling/v1beta1"
|
||||||
|
@ -173,6 +174,7 @@ func describerMap(clientConfig *rest.Config) (map[schema.GroupKind]describe.Desc
|
||||||
{Group: extensionsv1beta1.GroupName, Kind: "DaemonSet"}: &DaemonSetDescriber{c},
|
{Group: extensionsv1beta1.GroupName, Kind: "DaemonSet"}: &DaemonSetDescriber{c},
|
||||||
{Group: extensionsv1beta1.GroupName, Kind: "Deployment"}: &DeploymentDescriber{c},
|
{Group: extensionsv1beta1.GroupName, Kind: "Deployment"}: &DeploymentDescriber{c},
|
||||||
{Group: extensionsv1beta1.GroupName, Kind: "Ingress"}: &IngressDescriber{c},
|
{Group: extensionsv1beta1.GroupName, Kind: "Ingress"}: &IngressDescriber{c},
|
||||||
|
{Group: networkingv1beta1.GroupName, Kind: "Ingress"}: &IngressDescriber{c},
|
||||||
{Group: batchv1.GroupName, Kind: "Job"}: &JobDescriber{c},
|
{Group: batchv1.GroupName, Kind: "Job"}: &JobDescriber{c},
|
||||||
{Group: batchv1.GroupName, Kind: "CronJob"}: &CronJobDescriber{c},
|
{Group: batchv1.GroupName, Kind: "CronJob"}: &CronJobDescriber{c},
|
||||||
{Group: appsv1.GroupName, Kind: "StatefulSet"}: &StatefulSetDescriber{c},
|
{Group: appsv1.GroupName, Kind: "StatefulSet"}: &StatefulSetDescriber{c},
|
||||||
|
|
|
@ -46,6 +46,7 @@ import (
|
||||||
eventsv1beta1 "k8s.io/api/events/v1beta1"
|
eventsv1beta1 "k8s.io/api/events/v1beta1"
|
||||||
extensionsapiv1beta1 "k8s.io/api/extensions/v1beta1"
|
extensionsapiv1beta1 "k8s.io/api/extensions/v1beta1"
|
||||||
networkingapiv1 "k8s.io/api/networking/v1"
|
networkingapiv1 "k8s.io/api/networking/v1"
|
||||||
|
networkingapiv1beta1 "k8s.io/api/networking/v1beta1"
|
||||||
policyapiv1beta1 "k8s.io/api/policy/v1beta1"
|
policyapiv1beta1 "k8s.io/api/policy/v1beta1"
|
||||||
rbacv1 "k8s.io/api/rbac/v1"
|
rbacv1 "k8s.io/api/rbac/v1"
|
||||||
rbacv1alpha1 "k8s.io/api/rbac/v1alpha1"
|
rbacv1alpha1 "k8s.io/api/rbac/v1alpha1"
|
||||||
|
@ -487,6 +488,7 @@ func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig {
|
||||||
eventsv1beta1.SchemeGroupVersion,
|
eventsv1beta1.SchemeGroupVersion,
|
||||||
extensionsapiv1beta1.SchemeGroupVersion,
|
extensionsapiv1beta1.SchemeGroupVersion,
|
||||||
networkingapiv1.SchemeGroupVersion,
|
networkingapiv1.SchemeGroupVersion,
|
||||||
|
networkingapiv1beta1.SchemeGroupVersion,
|
||||||
policyapiv1beta1.SchemeGroupVersion,
|
policyapiv1beta1.SchemeGroupVersion,
|
||||||
rbacv1.SchemeGroupVersion,
|
rbacv1.SchemeGroupVersion,
|
||||||
rbacv1beta1.SchemeGroupVersion,
|
rbacv1beta1.SchemeGroupVersion,
|
||||||
|
|
|
@ -18,12 +18,14 @@ package rest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
networkingapiv1 "k8s.io/api/networking/v1"
|
networkingapiv1 "k8s.io/api/networking/v1"
|
||||||
|
networkingapiv1beta1 "k8s.io/api/networking/v1beta1"
|
||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/apis/networking"
|
"k8s.io/kubernetes/pkg/apis/networking"
|
||||||
|
ingressstore "k8s.io/kubernetes/pkg/registry/networking/ingress/storage"
|
||||||
networkpolicystore "k8s.io/kubernetes/pkg/registry/networking/networkpolicy/storage"
|
networkpolicystore "k8s.io/kubernetes/pkg/registry/networking/networkpolicy/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -35,13 +37,17 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
|
||||||
// TODO refactor the plumbing to provide the information in the APIGroupInfo
|
// TODO refactor the plumbing to provide the information in the APIGroupInfo
|
||||||
|
|
||||||
if apiResourceConfigSource.VersionEnabled(networkingapiv1.SchemeGroupVersion) {
|
if apiResourceConfigSource.VersionEnabled(networkingapiv1.SchemeGroupVersion) {
|
||||||
apiGroupInfo.VersionedResourcesStorageMap[networkingapiv1.SchemeGroupVersion.Version] = p.v1alpha1Storage(apiResourceConfigSource, restOptionsGetter)
|
apiGroupInfo.VersionedResourcesStorageMap[networkingapiv1.SchemeGroupVersion.Version] = p.v1Storage(apiResourceConfigSource, restOptionsGetter)
|
||||||
|
}
|
||||||
|
|
||||||
|
if apiResourceConfigSource.VersionEnabled(networkingapiv1beta1.SchemeGroupVersion) {
|
||||||
|
apiGroupInfo.VersionedResourcesStorageMap[networkingapiv1beta1.SchemeGroupVersion.Version] = p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter)
|
||||||
}
|
}
|
||||||
|
|
||||||
return apiGroupInfo, true
|
return apiGroupInfo, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) v1alpha1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
// networkpolicies
|
// networkpolicies
|
||||||
networkPolicyStorage := networkpolicystore.NewREST(restOptionsGetter)
|
networkPolicyStorage := networkpolicystore.NewREST(restOptionsGetter)
|
||||||
|
@ -50,6 +56,15 @@ func (p RESTStorageProvider) v1alpha1Storage(apiResourceConfigSource serverstora
|
||||||
return storage
|
return storage
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
|
storage := map[string]rest.Storage{}
|
||||||
|
// ingresses
|
||||||
|
ingressStorage, ingressStatusStorage := ingressstore.NewREST(restOptionsGetter)
|
||||||
|
storage["ingresses"] = ingressStorage
|
||||||
|
storage["ingresses/status"] = ingressStatusStorage
|
||||||
|
return storage
|
||||||
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) GroupName() string {
|
func (p RESTStorageProvider) GroupName() string {
|
||||||
return networking.GroupName
|
return networking.GroupName
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// +k8s:deepcopy-gen=package
|
||||||
|
// +k8s:openapi-gen=true
|
||||||
|
// +groupName=networking.k8s.io
|
||||||
|
|
||||||
|
package v1beta1 // import "k8s.io/api/networking/v1beta1"
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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 v1beta1
|
||||||
|
|
||||||
|
import (
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GroupName is the group name use in this package
|
||||||
|
const GroupName = "networking.k8s.io"
|
||||||
|
|
||||||
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
|
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"}
|
||||||
|
|
||||||
|
// Resource takes an unqualified resource and returns a Group qualified GroupResource
|
||||||
|
func Resource(resource string) schema.GroupResource {
|
||||||
|
return SchemeGroupVersion.WithResource(resource).GroupResource()
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
// SchemeBuilder holds functions that add things to a scheme
|
||||||
|
// TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api.
|
||||||
|
// localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes.
|
||||||
|
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
|
||||||
|
localSchemeBuilder = &SchemeBuilder
|
||||||
|
|
||||||
|
// AddToScheme adds the types of this group into the given scheme.
|
||||||
|
AddToScheme = localSchemeBuilder.AddToScheme
|
||||||
|
)
|
||||||
|
|
||||||
|
// Adds the list of known types to the given scheme.
|
||||||
|
func addKnownTypes(scheme *runtime.Scheme) error {
|
||||||
|
scheme.AddKnownTypes(SchemeGroupVersion,
|
||||||
|
&Ingress{},
|
||||||
|
&IngressList{},
|
||||||
|
)
|
||||||
|
// Add the watch version that applies
|
||||||
|
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -0,0 +1,192 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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 v1beta1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"k8s.io/api/core/v1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/util/intstr"
|
||||||
|
)
|
||||||
|
|
||||||
|
// +genclient
|
||||||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
|
||||||
|
// Ingress is a collection of rules that allow inbound connections to reach the
|
||||||
|
// endpoints defined by a backend. An Ingress can be configured to give services
|
||||||
|
// externally-reachable urls, load balance traffic, terminate SSL, offer name
|
||||||
|
// based virtual hosting etc.
|
||||||
|
type Ingress struct {
|
||||||
|
metav1.TypeMeta `json:",inline"`
|
||||||
|
// Standard object's metadata.
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
|
||||||
|
// +optional
|
||||||
|
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
||||||
|
|
||||||
|
// Spec is the desired state of the Ingress.
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
|
||||||
|
// +optional
|
||||||
|
Spec IngressSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
|
||||||
|
|
||||||
|
// Status is the current state of the Ingress.
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
|
||||||
|
// +optional
|
||||||
|
Status IngressStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
|
||||||
|
// IngressList is a collection of Ingress.
|
||||||
|
type IngressList struct {
|
||||||
|
metav1.TypeMeta `json:",inline"`
|
||||||
|
// Standard object's metadata.
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
|
||||||
|
// +optional
|
||||||
|
metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
||||||
|
|
||||||
|
// Items is the list of Ingress.
|
||||||
|
Items []Ingress `json:"items" protobuf:"bytes,2,rep,name=items"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// IngressSpec describes the Ingress the user wishes to exist.
|
||||||
|
type IngressSpec struct {
|
||||||
|
// A default backend capable of servicing requests that don't match any
|
||||||
|
// rule. At least one of 'backend' or 'rules' must be specified. This field
|
||||||
|
// is optional to allow the loadbalancer controller or defaulting logic to
|
||||||
|
// specify a global default.
|
||||||
|
// +optional
|
||||||
|
Backend *IngressBackend `json:"backend,omitempty" protobuf:"bytes,1,opt,name=backend"`
|
||||||
|
|
||||||
|
// TLS configuration. Currently the Ingress only supports a single TLS
|
||||||
|
// port, 443. If multiple members of this list specify different hosts, they
|
||||||
|
// will be multiplexed on the same port according to the hostname specified
|
||||||
|
// through the SNI TLS extension, if the ingress controller fulfilling the
|
||||||
|
// ingress supports SNI.
|
||||||
|
// +optional
|
||||||
|
TLS []IngressTLS `json:"tls,omitempty" protobuf:"bytes,2,rep,name=tls"`
|
||||||
|
|
||||||
|
// A list of host rules used to configure the Ingress. If unspecified, or
|
||||||
|
// no rule matches, all traffic is sent to the default backend.
|
||||||
|
// +optional
|
||||||
|
Rules []IngressRule `json:"rules,omitempty" protobuf:"bytes,3,rep,name=rules"`
|
||||||
|
// TODO: Add the ability to specify load-balancer IP through claims
|
||||||
|
}
|
||||||
|
|
||||||
|
// IngressTLS describes the transport layer security associated with an Ingress.
|
||||||
|
type IngressTLS struct {
|
||||||
|
// Hosts are a list of hosts included in the TLS certificate. The values in
|
||||||
|
// this list must match the name/s used in the tlsSecret. Defaults to the
|
||||||
|
// wildcard host setting for the loadbalancer controller fulfilling this
|
||||||
|
// Ingress, if left unspecified.
|
||||||
|
// +optional
|
||||||
|
Hosts []string `json:"hosts,omitempty" protobuf:"bytes,1,rep,name=hosts"`
|
||||||
|
// SecretName is the name of the secret used to terminate SSL traffic on 443.
|
||||||
|
// Field is left optional to allow SSL routing based on SNI hostname alone.
|
||||||
|
// If the SNI host in a listener conflicts with the "Host" header field used
|
||||||
|
// by an IngressRule, the SNI host is used for termination and value of the
|
||||||
|
// Host header is used for routing.
|
||||||
|
// +optional
|
||||||
|
SecretName string `json:"secretName,omitempty" protobuf:"bytes,2,opt,name=secretName"`
|
||||||
|
// TODO: Consider specifying different modes of termination, protocols etc.
|
||||||
|
}
|
||||||
|
|
||||||
|
// IngressStatus describe the current state of the Ingress.
|
||||||
|
type IngressStatus struct {
|
||||||
|
// LoadBalancer contains the current status of the load-balancer.
|
||||||
|
// +optional
|
||||||
|
LoadBalancer v1.LoadBalancerStatus `json:"loadBalancer,omitempty" protobuf:"bytes,1,opt,name=loadBalancer"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// IngressRule represents the rules mapping the paths under a specified host to
|
||||||
|
// the related backend services. Incoming requests are first evaluated for a host
|
||||||
|
// match, then routed to the backend associated with the matching IngressRuleValue.
|
||||||
|
type IngressRule struct {
|
||||||
|
// Host is the fully qualified domain name of a network host, as defined
|
||||||
|
// by RFC 3986. Note the following deviations from the "host" part of the
|
||||||
|
// URI as defined in the RFC:
|
||||||
|
// 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the
|
||||||
|
// IP in the Spec of the parent Ingress.
|
||||||
|
// 2. The `:` delimiter is not respected because ports are not allowed.
|
||||||
|
// Currently the port of an Ingress is implicitly :80 for http and
|
||||||
|
// :443 for https.
|
||||||
|
// Both these may change in the future.
|
||||||
|
// Incoming requests are matched against the host before the IngressRuleValue.
|
||||||
|
// If the host is unspecified, the Ingress routes all traffic based on the
|
||||||
|
// specified IngressRuleValue.
|
||||||
|
// +optional
|
||||||
|
Host string `json:"host,omitempty" protobuf:"bytes,1,opt,name=host"`
|
||||||
|
// IngressRuleValue represents a rule to route requests for this IngressRule.
|
||||||
|
// If unspecified, the rule defaults to a http catch-all. Whether that sends
|
||||||
|
// just traffic matching the host to the default backend or all traffic to the
|
||||||
|
// default backend, is left to the controller fulfilling the Ingress. Http is
|
||||||
|
// currently the only supported IngressRuleValue.
|
||||||
|
// +optional
|
||||||
|
IngressRuleValue `json:",inline,omitempty" protobuf:"bytes,2,opt,name=ingressRuleValue"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// IngressRuleValue represents a rule to apply against incoming requests. If the
|
||||||
|
// rule is satisfied, the request is routed to the specified backend. Currently
|
||||||
|
// mixing different types of rules in a single Ingress is disallowed, so exactly
|
||||||
|
// one of the following must be set.
|
||||||
|
type IngressRuleValue struct {
|
||||||
|
//TODO:
|
||||||
|
// 1. Consider renaming this resource and the associated rules so they
|
||||||
|
// aren't tied to Ingress. They can be used to route intra-cluster traffic.
|
||||||
|
// 2. Consider adding fields for ingress-type specific global options
|
||||||
|
// usable by a loadbalancer, like http keep-alive.
|
||||||
|
|
||||||
|
// +optional
|
||||||
|
HTTP *HTTPIngressRuleValue `json:"http,omitempty" protobuf:"bytes,1,opt,name=http"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// HTTPIngressRuleValue is a list of http selectors pointing to backends.
|
||||||
|
// In the example: http://<host>/<path>?<searchpart> -> backend where
|
||||||
|
// where parts of the url correspond to RFC 3986, this resource will be used
|
||||||
|
// to match against everything after the last '/' and before the first '?'
|
||||||
|
// or '#'.
|
||||||
|
type HTTPIngressRuleValue struct {
|
||||||
|
// A collection of paths that map requests to backends.
|
||||||
|
Paths []HTTPIngressPath `json:"paths" protobuf:"bytes,1,rep,name=paths"`
|
||||||
|
// TODO: Consider adding fields for ingress-type specific global
|
||||||
|
// options usable by a loadbalancer, like http keep-alive.
|
||||||
|
}
|
||||||
|
|
||||||
|
// HTTPIngressPath associates a path regex with a backend. Incoming urls matching
|
||||||
|
// the path are forwarded to the backend.
|
||||||
|
type HTTPIngressPath struct {
|
||||||
|
// Path is an extended POSIX regex as defined by IEEE Std 1003.1,
|
||||||
|
// (i.e this follows the egrep/unix syntax, not the perl syntax)
|
||||||
|
// matched against the path of an incoming request. Currently it can
|
||||||
|
// contain characters disallowed from the conventional "path"
|
||||||
|
// part of a URL as defined by RFC 3986. Paths must begin with
|
||||||
|
// a '/'. If unspecified, the path defaults to a catch all sending
|
||||||
|
// traffic to the backend.
|
||||||
|
// +optional
|
||||||
|
Path string `json:"path,omitempty" protobuf:"bytes,1,opt,name=path"`
|
||||||
|
|
||||||
|
// Backend defines the referenced service endpoint to which the traffic
|
||||||
|
// will be forwarded to.
|
||||||
|
Backend IngressBackend `json:"backend" protobuf:"bytes,2,opt,name=backend"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// IngressBackend describes all endpoints for a given service and port.
|
||||||
|
type IngressBackend struct {
|
||||||
|
// Specifies the name of the referenced service.
|
||||||
|
ServiceName string `json:"serviceName" protobuf:"bytes,1,opt,name=serviceName"`
|
||||||
|
|
||||||
|
// Specifies the port of the referenced service.
|
||||||
|
ServicePort intstr.IntOrString `json:"servicePort" protobuf:"bytes,2,opt,name=servicePort"`
|
||||||
|
}
|
|
@ -266,6 +266,14 @@ func GetEtcdStorageData() map[schema.GroupVersionResource]StorageData {
|
||||||
},
|
},
|
||||||
// --
|
// --
|
||||||
|
|
||||||
|
// k8s.io/kubernetes/pkg/apis/networking/v1beta1
|
||||||
|
gvr("networking.k8s.io", "v1beta1", "ingresses"): {
|
||||||
|
Stub: `{"metadata": {"name": "ingress2"}, "spec": {"backend": {"serviceName": "service", "servicePort": 5000}}}`,
|
||||||
|
ExpectedEtcdPath: "/registry/ingress/etcdstoragepathtestnamespace/ingress2",
|
||||||
|
ExpectedGVK: gvkP("extensions", "v1beta1", "Ingress"),
|
||||||
|
},
|
||||||
|
// --
|
||||||
|
|
||||||
// k8s.io/kubernetes/pkg/apis/networking/v1
|
// k8s.io/kubernetes/pkg/apis/networking/v1
|
||||||
gvr("networking.k8s.io", "v1", "networkpolicies"): {
|
gvr("networking.k8s.io", "v1", "networkpolicies"): {
|
||||||
Stub: `{"metadata": {"name": "np2"}, "spec": {"podSelector": {"matchLabels": {"e": "f"}}}}`,
|
Stub: `{"metadata": {"name": "np2"}, "spec": {"podSelector": {"matchLabels": {"e": "f"}}}}`,
|
||||||
|
|
Loading…
Reference in New Issue