mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 19:31:44 +00:00
bump e2e test to ingress v1
This commit is contained in:
parent
147ee4bc52
commit
7d7179ebfd
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
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
|
||||||
|
|
||||||
|
const (
|
||||||
|
// AnnotationIsDefaultIngressClass can be used to indicate that an
|
||||||
|
// IngressClass should be considered default. When a single IngressClass
|
||||||
|
// resource has this annotation set to true, new Ingress resources without a
|
||||||
|
// class specified will be assigned this default class.
|
||||||
|
AnnotationIsDefaultIngressClass = "ingressclass.kubernetes.io/is-default-class"
|
||||||
|
)
|
@ -41,7 +41,7 @@ import (
|
|||||||
|
|
||||||
appsv1 "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
networkingv1 "k8s.io/api/networking/v1"
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/fields"
|
"k8s.io/apimachinery/pkg/fields"
|
||||||
@ -220,6 +220,7 @@ func CreateIngressComformanceTests(jig *TestJig, ns string, annotations map[stri
|
|||||||
updatedTLSHost := "foobar.com"
|
updatedTLSHost := "foobar.com"
|
||||||
updateURLMapHost := "bar.baz.com"
|
updateURLMapHost := "bar.baz.com"
|
||||||
updateURLMapPath := "/testurl"
|
updateURLMapPath := "/testurl"
|
||||||
|
prefixPathType := networkingv1.PathTypePrefix
|
||||||
// Platform agnostic list of tests that must be satisfied by all controllers
|
// Platform agnostic list of tests that must be satisfied by all controllers
|
||||||
tests := []ConformanceTests{
|
tests := []ConformanceTests{
|
||||||
{
|
{
|
||||||
@ -236,8 +237,8 @@ func CreateIngressComformanceTests(jig *TestJig, ns string, annotations map[stri
|
|||||||
fmt.Sprintf("should update url map for host %v to expose a single url: %v", updateURLMapHost, updateURLMapPath),
|
fmt.Sprintf("should update url map for host %v to expose a single url: %v", updateURLMapHost, updateURLMapPath),
|
||||||
func() {
|
func() {
|
||||||
var pathToFail string
|
var pathToFail string
|
||||||
jig.Update(func(ing *networkingv1beta1.Ingress) {
|
jig.Update(func(ing *networkingv1.Ingress) {
|
||||||
newRules := []networkingv1beta1.IngressRule{}
|
newRules := []networkingv1.IngressRule{}
|
||||||
for _, rule := range ing.Spec.Rules {
|
for _, rule := range ing.Spec.Rules {
|
||||||
if rule.Host != updateURLMapHost {
|
if rule.Host != updateURLMapHost {
|
||||||
newRules = append(newRules, rule)
|
newRules = append(newRules, rule)
|
||||||
@ -245,13 +246,14 @@ func CreateIngressComformanceTests(jig *TestJig, ns string, annotations map[stri
|
|||||||
}
|
}
|
||||||
existingPath := rule.IngressRuleValue.HTTP.Paths[0]
|
existingPath := rule.IngressRuleValue.HTTP.Paths[0]
|
||||||
pathToFail = existingPath.Path
|
pathToFail = existingPath.Path
|
||||||
newRules = append(newRules, networkingv1beta1.IngressRule{
|
newRules = append(newRules, networkingv1.IngressRule{
|
||||||
Host: updateURLMapHost,
|
Host: updateURLMapHost,
|
||||||
IngressRuleValue: networkingv1beta1.IngressRuleValue{
|
IngressRuleValue: networkingv1.IngressRuleValue{
|
||||||
HTTP: &networkingv1beta1.HTTPIngressRuleValue{
|
HTTP: &networkingv1.HTTPIngressRuleValue{
|
||||||
Paths: []networkingv1beta1.HTTPIngressPath{
|
Paths: []networkingv1.HTTPIngressPath{
|
||||||
{
|
{
|
||||||
Path: updateURLMapPath,
|
Path: updateURLMapPath,
|
||||||
|
PathType: &prefixPathType,
|
||||||
Backend: existingPath.Backend,
|
Backend: existingPath.Backend,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -273,14 +275,14 @@ func CreateIngressComformanceTests(jig *TestJig, ns string, annotations map[stri
|
|||||||
tests = append(tests, ConformanceTests{
|
tests = append(tests, ConformanceTests{
|
||||||
fmt.Sprintf("should update SSL certificate with modified hostname %v", updatedTLSHost),
|
fmt.Sprintf("should update SSL certificate with modified hostname %v", updatedTLSHost),
|
||||||
func() {
|
func() {
|
||||||
jig.Update(func(ing *networkingv1beta1.Ingress) {
|
jig.Update(func(ing *networkingv1.Ingress) {
|
||||||
newRules := []networkingv1beta1.IngressRule{}
|
newRules := []networkingv1.IngressRule{}
|
||||||
for _, rule := range ing.Spec.Rules {
|
for _, rule := range ing.Spec.Rules {
|
||||||
if rule.Host != tlsHost {
|
if rule.Host != tlsHost {
|
||||||
newRules = append(newRules, rule)
|
newRules = append(newRules, rule)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
newRules = append(newRules, networkingv1beta1.IngressRule{
|
newRules = append(newRules, networkingv1.IngressRule{
|
||||||
Host: updatedTLSHost,
|
Host: updatedTLSHost,
|
||||||
IngressRuleValue: rule.IngressRuleValue,
|
IngressRuleValue: rule.IngressRuleValue,
|
||||||
})
|
})
|
||||||
@ -417,7 +419,7 @@ type TestJig struct {
|
|||||||
|
|
||||||
RootCAs map[string][]byte
|
RootCAs map[string][]byte
|
||||||
Address string
|
Address string
|
||||||
Ingress *networkingv1beta1.Ingress
|
Ingress *networkingv1.Ingress
|
||||||
// class is the value of the annotation keyed under
|
// class is the value of the annotation keyed under
|
||||||
// `kubernetes.io/ingress.class`. It's added to all ingresses created by
|
// `kubernetes.io/ingress.class`. It's added to all ingresses created by
|
||||||
// this jig.
|
// this jig.
|
||||||
@ -483,10 +485,7 @@ func (j *TestJig) CreateIngress(manifestPath, ns string, ingAnnotations map[stri
|
|||||||
j.Ingress, err = ingressFromManifest(filepath.Join(manifestPath, "ing.yaml"))
|
j.Ingress, err = ingressFromManifest(filepath.Join(manifestPath, "ing.yaml"))
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
j.Ingress.Namespace = ns
|
j.Ingress.Namespace = ns
|
||||||
j.Ingress.Annotations = map[string]string{IngressClassKey: j.Class}
|
j.Ingress.Spec.IngressClassName = &j.Class
|
||||||
for k, v := range ingAnnotations {
|
|
||||||
j.Ingress.Annotations[k] = v
|
|
||||||
}
|
|
||||||
j.Logger.Infof("creating %v ingress", j.Ingress.Name)
|
j.Logger.Infof("creating %v ingress", j.Ingress.Name)
|
||||||
j.Ingress, err = j.runCreate(j.Ingress)
|
j.Ingress, err = j.runCreate(j.Ingress)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
@ -505,8 +504,8 @@ func marshalToYaml(obj runtime.Object, gv schema.GroupVersion) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ingressFromManifest reads a .json/yaml file and returns the ingress in it.
|
// ingressFromManifest reads a .json/yaml file and returns the ingress in it.
|
||||||
func ingressFromManifest(fileName string) (*networkingv1beta1.Ingress, error) {
|
func ingressFromManifest(fileName string) (*networkingv1.Ingress, error) {
|
||||||
var ing networkingv1beta1.Ingress
|
var ing networkingv1.Ingress
|
||||||
data, err := e2etestfiles.Read(fileName)
|
data, err := e2etestfiles.Read(fileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -524,8 +523,8 @@ func ingressFromManifest(fileName string) (*networkingv1beta1.Ingress, error) {
|
|||||||
|
|
||||||
// ingressToManifest generates a yaml file in the given path with the given ingress.
|
// ingressToManifest generates a yaml file in the given path with the given ingress.
|
||||||
// Assumes that a directory exists at the given path.
|
// Assumes that a directory exists at the given path.
|
||||||
func ingressToManifest(ing *networkingv1beta1.Ingress, path string) error {
|
func ingressToManifest(ing *networkingv1.Ingress, path string) error {
|
||||||
serialized, err := marshalToYaml(ing, networkingv1beta1.SchemeGroupVersion)
|
serialized, err := marshalToYaml(ing, networkingv1.SchemeGroupVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to marshal ingress %v to YAML: %v", ing, err)
|
return fmt.Errorf("failed to marshal ingress %v to YAML: %v", ing, err)
|
||||||
}
|
}
|
||||||
@ -537,9 +536,9 @@ func ingressToManifest(ing *networkingv1beta1.Ingress, path string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// runCreate runs the required command to create the given ingress.
|
// runCreate runs the required command to create the given ingress.
|
||||||
func (j *TestJig) runCreate(ing *networkingv1beta1.Ingress) (*networkingv1beta1.Ingress, error) {
|
func (j *TestJig) runCreate(ing *networkingv1.Ingress) (*networkingv1.Ingress, error) {
|
||||||
if j.Class != MulticlusterIngressClassValue {
|
if j.Class != MulticlusterIngressClassValue {
|
||||||
return j.Client.NetworkingV1beta1().Ingresses(ing.Namespace).Create(context.TODO(), ing, metav1.CreateOptions{})
|
return j.Client.NetworkingV1().Ingresses(ing.Namespace).Create(context.TODO(), ing, metav1.CreateOptions{})
|
||||||
}
|
}
|
||||||
// Use kubemci to create a multicluster ingress.
|
// Use kubemci to create a multicluster ingress.
|
||||||
filePath := framework.TestContext.OutputDir + "/mci.yaml"
|
filePath := framework.TestContext.OutputDir + "/mci.yaml"
|
||||||
@ -551,9 +550,9 @@ func (j *TestJig) runCreate(ing *networkingv1beta1.Ingress) (*networkingv1beta1.
|
|||||||
}
|
}
|
||||||
|
|
||||||
// runUpdate runs the required command to update the given ingress.
|
// runUpdate runs the required command to update the given ingress.
|
||||||
func (j *TestJig) runUpdate(ing *networkingv1beta1.Ingress) (*networkingv1beta1.Ingress, error) {
|
func (j *TestJig) runUpdate(ing *networkingv1.Ingress) (*networkingv1.Ingress, error) {
|
||||||
if j.Class != MulticlusterIngressClassValue {
|
if j.Class != MulticlusterIngressClassValue {
|
||||||
return j.Client.NetworkingV1beta1().Ingresses(ing.Namespace).Update(context.TODO(), ing, metav1.UpdateOptions{})
|
return j.Client.NetworkingV1().Ingresses(ing.Namespace).Update(context.TODO(), ing, metav1.UpdateOptions{})
|
||||||
}
|
}
|
||||||
// Use kubemci to update a multicluster ingress.
|
// Use kubemci to update a multicluster ingress.
|
||||||
// kubemci does not have an update command. We use "create --force" to update an existing ingress.
|
// kubemci does not have an update command. We use "create --force" to update an existing ingress.
|
||||||
@ -574,11 +573,11 @@ func DescribeIng(ns string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update retrieves the ingress, performs the passed function, and then updates it.
|
// Update retrieves the ingress, performs the passed function, and then updates it.
|
||||||
func (j *TestJig) Update(update func(ing *networkingv1beta1.Ingress)) {
|
func (j *TestJig) Update(update func(ing *networkingv1.Ingress)) {
|
||||||
var err error
|
var err error
|
||||||
ns, name := j.Ingress.Namespace, j.Ingress.Name
|
ns, name := j.Ingress.Namespace, j.Ingress.Name
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 3; i++ {
|
||||||
j.Ingress, err = j.Client.NetworkingV1beta1().Ingresses(ns).Get(context.TODO(), name, metav1.GetOptions{})
|
j.Ingress, err = j.Client.NetworkingV1().Ingresses(ns).Get(context.TODO(), name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
framework.Failf("failed to get ingress %s/%s: %v", ns, name, err)
|
framework.Failf("failed to get ingress %s/%s: %v", ns, name, err)
|
||||||
}
|
}
|
||||||
@ -602,8 +601,8 @@ func (j *TestJig) AddHTTPS(secretName string, hosts ...string) {
|
|||||||
_, cert, _, err := createTLSSecret(j.Client, j.Ingress.Namespace, secretName, hosts...)
|
_, cert, _, err := createTLSSecret(j.Client, j.Ingress.Namespace, secretName, hosts...)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
j.Logger.Infof("Updating ingress %v to also use secret %v for TLS termination", j.Ingress.Name, secretName)
|
j.Logger.Infof("Updating ingress %v to also use secret %v for TLS termination", j.Ingress.Name, secretName)
|
||||||
j.Update(func(ing *networkingv1beta1.Ingress) {
|
j.Update(func(ing *networkingv1.Ingress) {
|
||||||
ing.Spec.TLS = append(ing.Spec.TLS, networkingv1beta1.IngressTLS{Hosts: hosts, SecretName: secretName})
|
ing.Spec.TLS = append(ing.Spec.TLS, networkingv1.IngressTLS{Hosts: hosts, SecretName: secretName})
|
||||||
})
|
})
|
||||||
j.RootCAs[secretName] = cert
|
j.RootCAs[secretName] = cert
|
||||||
}
|
}
|
||||||
@ -613,8 +612,8 @@ func (j *TestJig) SetHTTPS(secretName string, hosts ...string) {
|
|||||||
_, cert, _, err := createTLSSecret(j.Client, j.Ingress.Namespace, secretName, hosts...)
|
_, cert, _, err := createTLSSecret(j.Client, j.Ingress.Namespace, secretName, hosts...)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
j.Logger.Infof("Updating ingress %v to only use secret %v for TLS termination", j.Ingress.Name, secretName)
|
j.Logger.Infof("Updating ingress %v to only use secret %v for TLS termination", j.Ingress.Name, secretName)
|
||||||
j.Update(func(ing *networkingv1beta1.Ingress) {
|
j.Update(func(ing *networkingv1.Ingress) {
|
||||||
ing.Spec.TLS = []networkingv1beta1.IngressTLS{{Hosts: hosts, SecretName: secretName}}
|
ing.Spec.TLS = []networkingv1.IngressTLS{{Hosts: hosts, SecretName: secretName}}
|
||||||
})
|
})
|
||||||
j.RootCAs = map[string][]byte{secretName: cert}
|
j.RootCAs = map[string][]byte{secretName: cert}
|
||||||
}
|
}
|
||||||
@ -622,14 +621,14 @@ func (j *TestJig) SetHTTPS(secretName string, hosts ...string) {
|
|||||||
// RemoveHTTPS updates the ingress to not use this secret for TLS.
|
// RemoveHTTPS updates the ingress to not use this secret for TLS.
|
||||||
// Note: Does not delete the secret.
|
// Note: Does not delete the secret.
|
||||||
func (j *TestJig) RemoveHTTPS(secretName string) {
|
func (j *TestJig) RemoveHTTPS(secretName string) {
|
||||||
newTLS := []networkingv1beta1.IngressTLS{}
|
newTLS := []networkingv1.IngressTLS{}
|
||||||
for _, ingressTLS := range j.Ingress.Spec.TLS {
|
for _, ingressTLS := range j.Ingress.Spec.TLS {
|
||||||
if secretName != ingressTLS.SecretName {
|
if secretName != ingressTLS.SecretName {
|
||||||
newTLS = append(newTLS, ingressTLS)
|
newTLS = append(newTLS, ingressTLS)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
j.Logger.Infof("Updating ingress %v to not use secret %v for TLS termination", j.Ingress.Name, secretName)
|
j.Logger.Infof("Updating ingress %v to not use secret %v for TLS termination", j.Ingress.Name, secretName)
|
||||||
j.Update(func(ing *networkingv1beta1.Ingress) {
|
j.Update(func(ing *networkingv1.Ingress) {
|
||||||
ing.Spec.TLS = newTLS
|
ing.Spec.TLS = newTLS
|
||||||
})
|
})
|
||||||
delete(j.RootCAs, secretName)
|
delete(j.RootCAs, secretName)
|
||||||
@ -660,16 +659,16 @@ func (j *TestJig) TryDeleteIngress() {
|
|||||||
j.tryDeleteGivenIngress(j.Ingress)
|
j.tryDeleteGivenIngress(j.Ingress)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j *TestJig) tryDeleteGivenIngress(ing *networkingv1beta1.Ingress) {
|
func (j *TestJig) tryDeleteGivenIngress(ing *networkingv1.Ingress) {
|
||||||
if err := j.runDelete(ing); err != nil {
|
if err := j.runDelete(ing); err != nil {
|
||||||
j.Logger.Infof("Error while deleting the ingress %v/%v with class %s: %v", ing.Namespace, ing.Name, j.Class, err)
|
j.Logger.Infof("Error while deleting the ingress %v/%v with class %s: %v", ing.Namespace, ing.Name, j.Class, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// runDelete runs the required command to delete the given ingress.
|
// runDelete runs the required command to delete the given ingress.
|
||||||
func (j *TestJig) runDelete(ing *networkingv1beta1.Ingress) error {
|
func (j *TestJig) runDelete(ing *networkingv1.Ingress) error {
|
||||||
if j.Class != MulticlusterIngressClassValue {
|
if j.Class != MulticlusterIngressClassValue {
|
||||||
return j.Client.NetworkingV1beta1().Ingresses(ing.Namespace).Delete(context.TODO(), ing.Name, metav1.DeleteOptions{})
|
return j.Client.NetworkingV1().Ingresses(ing.Namespace).Delete(context.TODO(), ing.Name, metav1.DeleteOptions{})
|
||||||
}
|
}
|
||||||
// Use kubemci to delete a multicluster ingress.
|
// Use kubemci to delete a multicluster ingress.
|
||||||
filePath := framework.TestContext.OutputDir + "/mci.yaml"
|
filePath := framework.TestContext.OutputDir + "/mci.yaml"
|
||||||
@ -709,7 +708,7 @@ func getIngressAddress(client clientset.Interface, ns, name, class string) ([]st
|
|||||||
if class == MulticlusterIngressClassValue {
|
if class == MulticlusterIngressClassValue {
|
||||||
return getIngressAddressFromKubemci(name)
|
return getIngressAddressFromKubemci(name)
|
||||||
}
|
}
|
||||||
ing, err := client.NetworkingV1beta1().Ingresses(ns).Get(context.TODO(), name, metav1.GetOptions{})
|
ing, err := client.NetworkingV1().Ingresses(ns).Get(context.TODO(), name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -741,7 +740,7 @@ func (j *TestJig) WaitForIngressAddress(c clientset.Interface, ns, ingName strin
|
|||||||
return address, err
|
return address, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j *TestJig) pollIngressWithCert(ing *networkingv1beta1.Ingress, address string, knownHosts []string, cert []byte, waitForNodePort bool, timeout time.Duration) error {
|
func (j *TestJig) pollIngressWithCert(ing *networkingv1.Ingress, address string, knownHosts []string, cert []byte, waitForNodePort bool, timeout time.Duration) error {
|
||||||
// Check that all rules respond to a simple GET.
|
// Check that all rules respond to a simple GET.
|
||||||
knownHostsSet := sets.NewString(knownHosts...)
|
knownHostsSet := sets.NewString(knownHosts...)
|
||||||
for _, rules := range ing.Spec.Rules {
|
for _, rules := range ing.Spec.Rules {
|
||||||
@ -758,9 +757,9 @@ func (j *TestJig) pollIngressWithCert(ing *networkingv1beta1.Ingress, address st
|
|||||||
}
|
}
|
||||||
for _, p := range rules.IngressRuleValue.HTTP.Paths {
|
for _, p := range rules.IngressRuleValue.HTTP.Paths {
|
||||||
if waitForNodePort {
|
if waitForNodePort {
|
||||||
nodePort := int(p.Backend.ServicePort.IntVal)
|
nodePort := int(p.Backend.Service.Port.Number)
|
||||||
if err := j.pollServiceNodePort(ing.Namespace, p.Backend.ServiceName, nodePort); err != nil {
|
if err := j.pollServiceNodePort(ing.Namespace, p.Backend.Service.Name, nodePort); err != nil {
|
||||||
j.Logger.Infof("Error in waiting for nodeport %d on service %v/%v: %s", nodePort, ing.Namespace, p.Backend.ServiceName, err)
|
j.Logger.Infof("Error in waiting for nodeport %d on service %v/%v: %s", nodePort, ing.Namespace, p.Backend.Service.Name, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -801,7 +800,7 @@ func (j *TestJig) WaitForIngressToStable() {
|
|||||||
// http or https). If waitForNodePort is true, the NodePort of the Service
|
// http or https). If waitForNodePort is true, the NodePort of the Service
|
||||||
// is verified before verifying the Ingress. NodePort is currently a
|
// is verified before verifying the Ingress. NodePort is currently a
|
||||||
// requirement for cloudprovider Ingress.
|
// requirement for cloudprovider Ingress.
|
||||||
func (j *TestJig) WaitForGivenIngressWithTimeout(ing *networkingv1beta1.Ingress, waitForNodePort bool, timeout time.Duration) error {
|
func (j *TestJig) WaitForGivenIngressWithTimeout(ing *networkingv1.Ingress, waitForNodePort bool, timeout time.Duration) error {
|
||||||
// Wait for the loadbalancer IP.
|
// Wait for the loadbalancer IP.
|
||||||
address, err := j.WaitForIngressAddress(j.Client, ing.Namespace, ing.Name, timeout)
|
address, err := j.WaitForIngressAddress(j.Client, ing.Namespace, ing.Name, timeout)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -935,12 +934,12 @@ func (j *TestJig) GetServicePorts(includeDefaultBackend bool) map[string]v1.Serv
|
|||||||
}
|
}
|
||||||
|
|
||||||
backendSvcs := []string{}
|
backendSvcs := []string{}
|
||||||
if j.Ingress.Spec.Backend != nil {
|
if j.Ingress.Spec.DefaultBackend != nil {
|
||||||
backendSvcs = append(backendSvcs, j.Ingress.Spec.Backend.ServiceName)
|
backendSvcs = append(backendSvcs, j.Ingress.Spec.DefaultBackend.Service.Name)
|
||||||
}
|
}
|
||||||
for _, rule := range j.Ingress.Spec.Rules {
|
for _, rule := range j.Ingress.Spec.Rules {
|
||||||
for _, ingPath := range rule.HTTP.Paths {
|
for _, ingPath := range rule.HTTP.Paths {
|
||||||
backendSvcs = append(backendSvcs, ingPath.Backend.ServiceName)
|
backendSvcs = append(backendSvcs, ingPath.Backend.Service.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, svcName := range backendSvcs {
|
for _, svcName := range backendSvcs {
|
||||||
@ -1055,19 +1054,20 @@ func (cont *NginxIngressController) TearDown() {
|
|||||||
e2eservice.WaitForServiceDeletedWithFinalizer(cont.Client, cont.Ns, cont.lbSvc.Name)
|
e2eservice.WaitForServiceDeletedWithFinalizer(cont.Client, cont.Ns, cont.lbSvc.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateBacksideHTTPSIngressSpec(ns string) *networkingv1beta1.Ingress {
|
func generateBacksideHTTPSIngressSpec(ns string) *networkingv1.Ingress {
|
||||||
return &networkingv1beta1.Ingress{
|
return &networkingv1.Ingress{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "echoheaders-https",
|
Name: "echoheaders-https",
|
||||||
Namespace: ns,
|
Namespace: ns,
|
||||||
},
|
},
|
||||||
Spec: networkingv1beta1.IngressSpec{
|
Spec: networkingv1.IngressSpec{
|
||||||
// Note kubemci requires a default backend.
|
// Note kubemci requires a default backend.
|
||||||
Backend: &networkingv1beta1.IngressBackend{
|
DefaultBackend: &networkingv1.IngressBackend{
|
||||||
ServiceName: "echoheaders-https",
|
Service: &networkingv1.IngressServiceBackend{
|
||||||
ServicePort: intstr.IntOrString{
|
Name: "echoheaders-https",
|
||||||
Type: intstr.Int,
|
Port: networkingv1.ServiceBackendPort{
|
||||||
IntVal: 443,
|
Number: 443,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -1130,7 +1130,7 @@ func generateBacksideHTTPSDeploymentSpec() *appsv1.Deployment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SetUpBacksideHTTPSIngress sets up deployment, service and ingress with backside HTTPS configured.
|
// SetUpBacksideHTTPSIngress sets up deployment, service and ingress with backside HTTPS configured.
|
||||||
func (j *TestJig) SetUpBacksideHTTPSIngress(cs clientset.Interface, namespace string, staticIPName string) (*appsv1.Deployment, *v1.Service, *networkingv1beta1.Ingress, error) {
|
func (j *TestJig) SetUpBacksideHTTPSIngress(cs clientset.Interface, namespace string, staticIPName string) (*appsv1.Deployment, *v1.Service, *networkingv1.Ingress, error) {
|
||||||
deployCreated, err := cs.AppsV1().Deployments(namespace).Create(context.TODO(), generateBacksideHTTPSDeploymentSpec(), metav1.CreateOptions{})
|
deployCreated, err := cs.AppsV1().Deployments(namespace).Create(context.TODO(), generateBacksideHTTPSDeploymentSpec(), metav1.CreateOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, err
|
return nil, nil, nil, err
|
||||||
@ -1154,7 +1154,7 @@ func (j *TestJig) SetUpBacksideHTTPSIngress(cs clientset.Interface, namespace st
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DeleteTestResource deletes given deployment, service and ingress.
|
// DeleteTestResource deletes given deployment, service and ingress.
|
||||||
func (j *TestJig) DeleteTestResource(cs clientset.Interface, deploy *appsv1.Deployment, svc *v1.Service, ing *networkingv1beta1.Ingress) []error {
|
func (j *TestJig) DeleteTestResource(cs clientset.Interface, deploy *appsv1.Deployment, svc *v1.Service, ing *networkingv1.Ingress) []error {
|
||||||
var errs []error
|
var errs []error
|
||||||
if ing != nil {
|
if ing != nil {
|
||||||
if err := j.runDelete(ing); err != nil {
|
if err := j.runDelete(ing); err != nil {
|
||||||
|
@ -22,11 +22,11 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
networkingv1 "k8s.io/api/networking/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestIngressToManifest(t *testing.T) {
|
func TestIngressToManifest(t *testing.T) {
|
||||||
ing := &networkingv1beta1.Ingress{}
|
ing := &networkingv1.Ingress{}
|
||||||
// Create a temp dir.
|
// Create a temp dir.
|
||||||
tmpDir, err := ioutil.TempDir("", "kubemci")
|
tmpDir, err := ioutil.TempDir("", "kubemci")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -29,7 +29,6 @@ import (
|
|||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
networkingv1 "k8s.io/api/networking/v1"
|
networkingv1 "k8s.io/api/networking/v1"
|
||||||
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
|
||||||
rbacv1 "k8s.io/api/rbac/v1"
|
rbacv1 "k8s.io/api/rbac/v1"
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
@ -141,7 +140,7 @@ var _ = common.SIGDescribe("Loadbalancing: L7", func() {
|
|||||||
ginkgo.By(fmt.Sprintf("waiting for Ingress %s to get instance group annotation", name))
|
ginkgo.By(fmt.Sprintf("waiting for Ingress %s to get instance group annotation", name))
|
||||||
propagationTimeout := e2eservice.GetServiceLoadBalancerPropagationTimeout(f.ClientSet)
|
propagationTimeout := e2eservice.GetServiceLoadBalancerPropagationTimeout(f.ClientSet)
|
||||||
pollErr := wait.Poll(2*time.Second, propagationTimeout, func() (bool, error) {
|
pollErr := wait.Poll(2*time.Second, propagationTimeout, func() (bool, error) {
|
||||||
ing, err := f.ClientSet.NetworkingV1beta1().Ingresses(ns).Get(context.TODO(), name, metav1.GetOptions{})
|
ing, err := f.ClientSet.NetworkingV1().Ingresses(ns).Get(context.TODO(), name, metav1.GetOptions{})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
annotations := ing.Annotations
|
annotations := ing.Annotations
|
||||||
if annotations == nil || annotations[instanceGroupAnnotation] == "" {
|
if annotations == nil || annotations[instanceGroupAnnotation] == "" {
|
||||||
@ -162,7 +161,7 @@ var _ = common.SIGDescribe("Loadbalancing: L7", func() {
|
|||||||
scKey := e2eingress.StatusPrefix + "/ssl-cert"
|
scKey := e2eingress.StatusPrefix + "/ssl-cert"
|
||||||
beKey := e2eingress.StatusPrefix + "/backends"
|
beKey := e2eingress.StatusPrefix + "/backends"
|
||||||
wait.Poll(2*time.Second, time.Minute, func() (bool, error) {
|
wait.Poll(2*time.Second, time.Minute, func() (bool, error) {
|
||||||
ing, err := f.ClientSet.NetworkingV1beta1().Ingresses(ns).Get(context.TODO(), name, metav1.GetOptions{})
|
ing, err := f.ClientSet.NetworkingV1().Ingresses(ns).Get(context.TODO(), name, metav1.GetOptions{})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
annotations := ing.Annotations
|
annotations := ing.Annotations
|
||||||
if annotations != nil && (annotations[umKey] != "" || annotations[fwKey] != "" ||
|
if annotations != nil && (annotations[umKey] != "" || annotations[fwKey] != "" ||
|
||||||
@ -972,7 +971,7 @@ var _ = common.SIGDescribe("Ingress API", func() {
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
found := false
|
found := false
|
||||||
for _, group := range discoveryGroups.Groups {
|
for _, group := range discoveryGroups.Groups {
|
||||||
if group.Name == networkingv1beta1.GroupName {
|
if group.Name == networkingv1.GroupName {
|
||||||
for _, version := range group.Versions {
|
for _, version := range group.Versions {
|
||||||
if version.Version == ingVersion {
|
if version.Version == ingVersion {
|
||||||
found = true
|
found = true
|
||||||
|
@ -23,7 +23,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
networkingv1 "k8s.io/api/networking/v1"
|
networkingv1 "k8s.io/api/networking/v1"
|
||||||
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
types "k8s.io/apimachinery/pkg/types"
|
types "k8s.io/apimachinery/pkg/types"
|
||||||
@ -114,7 +113,7 @@ func createIngressClass(cs clientset.Interface, name string, isDefault bool, uni
|
|||||||
}
|
}
|
||||||
|
|
||||||
if isDefault {
|
if isDefault {
|
||||||
ingressClass.Annotations = map[string]string{networkingv1beta1.AnnotationIsDefaultIngressClass: "true"}
|
ingressClass.Annotations = map[string]string{networkingv1.AnnotationIsDefaultIngressClass: "true"}
|
||||||
}
|
}
|
||||||
|
|
||||||
return cs.NetworkingV1().IngressClasses().Create(context.TODO(), ingressClass, metav1.CreateOptions{})
|
return cs.NetworkingV1().IngressClasses().Create(context.TODO(), ingressClass, metav1.CreateOptions{})
|
||||||
|
@ -25,7 +25,7 @@ import (
|
|||||||
|
|
||||||
appsv1 "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
networkingv1 "k8s.io/api/networking/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/intstr"
|
"k8s.io/apimachinery/pkg/util/intstr"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
@ -76,7 +76,7 @@ type IngressScaleFramework struct {
|
|||||||
|
|
||||||
ScaleTestDeploy *appsv1.Deployment
|
ScaleTestDeploy *appsv1.Deployment
|
||||||
ScaleTestSvcs []*v1.Service
|
ScaleTestSvcs []*v1.Service
|
||||||
ScaleTestIngs []*networkingv1beta1.Ingress
|
ScaleTestIngs []*networkingv1.Ingress
|
||||||
|
|
||||||
// BatchCreateLatencies stores all ingress creation latencies, in different
|
// BatchCreateLatencies stores all ingress creation latencies, in different
|
||||||
// batches.
|
// batches.
|
||||||
@ -123,7 +123,7 @@ func (f *IngressScaleFramework) PrepareScaleTest() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
f.ScaleTestSvcs = []*v1.Service{}
|
f.ScaleTestSvcs = []*v1.Service{}
|
||||||
f.ScaleTestIngs = []*networkingv1beta1.Ingress{}
|
f.ScaleTestIngs = []*networkingv1.Ingress{}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -135,7 +135,7 @@ func (f *IngressScaleFramework) CleanupScaleTest() []error {
|
|||||||
f.Logger.Infof("Cleaning up ingresses...")
|
f.Logger.Infof("Cleaning up ingresses...")
|
||||||
for _, ing := range f.ScaleTestIngs {
|
for _, ing := range f.ScaleTestIngs {
|
||||||
if ing != nil {
|
if ing != nil {
|
||||||
if err := f.Clientset.NetworkingV1beta1().Ingresses(ing.Namespace).Delete(context.TODO(), ing.Name, metav1.DeleteOptions{}); err != nil {
|
if err := f.Clientset.NetworkingV1().Ingresses(ing.Namespace).Delete(context.TODO(), ing.Name, metav1.DeleteOptions{}); err != nil {
|
||||||
errs = append(errs, fmt.Errorf("error while deleting ingress %s/%s: %v", ing.Namespace, ing.Name, err))
|
errs = append(errs, fmt.Errorf("error while deleting ingress %s/%s: %v", ing.Namespace, ing.Name, err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -192,7 +192,7 @@ func (f *IngressScaleFramework) RunScaleTest() []error {
|
|||||||
numIngsToCreate := numIngsNeeded - numIngsCreated
|
numIngsToCreate := numIngsNeeded - numIngsCreated
|
||||||
ingWg.Add(numIngsToCreate)
|
ingWg.Add(numIngsToCreate)
|
||||||
svcQueue := make(chan *v1.Service, numIngsToCreate)
|
svcQueue := make(chan *v1.Service, numIngsToCreate)
|
||||||
ingQueue := make(chan *networkingv1beta1.Ingress, numIngsToCreate)
|
ingQueue := make(chan *networkingv1.Ingress, numIngsToCreate)
|
||||||
errQueue := make(chan error, numIngsToCreate)
|
errQueue := make(chan error, numIngsToCreate)
|
||||||
latencyQueue := make(chan time.Duration, numIngsToCreate)
|
latencyQueue := make(chan time.Duration, numIngsToCreate)
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
@ -272,14 +272,14 @@ func (f *IngressScaleFramework) RunScaleTest() []error {
|
|||||||
f.StepCreateLatencies = append(f.StepCreateLatencies, elapsed)
|
f.StepCreateLatencies = append(f.StepCreateLatencies, elapsed)
|
||||||
|
|
||||||
f.Logger.Infof("Updating ingress and wait for change to take effect")
|
f.Logger.Infof("Updating ingress and wait for change to take effect")
|
||||||
ingToUpdate, err := f.Clientset.NetworkingV1beta1().Ingresses(f.Namespace).Get(context.TODO(), ingCreated.Name, metav1.GetOptions{})
|
ingToUpdate, err := f.Clientset.NetworkingV1().Ingresses(f.Namespace).Get(context.TODO(), ingCreated.Name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errs = append(errs, err)
|
errs = append(errs, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
addTestPathToIngress(ingToUpdate)
|
addTestPathToIngress(ingToUpdate)
|
||||||
start = time.Now()
|
start = time.Now()
|
||||||
ingToUpdate, err = f.Clientset.NetworkingV1beta1().Ingresses(f.Namespace).Update(context.TODO(), ingToUpdate, metav1.UpdateOptions{})
|
ingToUpdate, err = f.Clientset.NetworkingV1().Ingresses(f.Namespace).Update(context.TODO(), ingToUpdate, metav1.UpdateOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errs = append(errs, err)
|
errs = append(errs, err)
|
||||||
return
|
return
|
||||||
@ -359,49 +359,52 @@ func (f *IngressScaleFramework) GetFormattedLatencies() string {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func addTestPathToIngress(ing *networkingv1beta1.Ingress) {
|
func addTestPathToIngress(ing *networkingv1.Ingress) {
|
||||||
|
prefixPathType := networkingv1.PathTypePrefix
|
||||||
ing.Spec.Rules[0].IngressRuleValue.HTTP.Paths = append(
|
ing.Spec.Rules[0].IngressRuleValue.HTTP.Paths = append(
|
||||||
ing.Spec.Rules[0].IngressRuleValue.HTTP.Paths,
|
ing.Spec.Rules[0].IngressRuleValue.HTTP.Paths,
|
||||||
networkingv1beta1.HTTPIngressPath{
|
networkingv1.HTTPIngressPath{
|
||||||
Path: "/test",
|
Path: "/test",
|
||||||
|
PathType: &prefixPathType,
|
||||||
Backend: ing.Spec.Rules[0].IngressRuleValue.HTTP.Paths[0].Backend,
|
Backend: ing.Spec.Rules[0].IngressRuleValue.HTTP.Paths[0].Backend,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *IngressScaleFramework) createScaleTestServiceIngress(suffix string, enableTLS bool) (*v1.Service, *networkingv1beta1.Ingress, error) {
|
func (f *IngressScaleFramework) createScaleTestServiceIngress(suffix string, enableTLS bool) (*v1.Service, *networkingv1.Ingress, error) {
|
||||||
svcCreated, err := f.Clientset.CoreV1().Services(f.Namespace).Create(context.TODO(), generateScaleTestServiceSpec(suffix), metav1.CreateOptions{})
|
svcCreated, err := f.Clientset.CoreV1().Services(f.Namespace).Create(context.TODO(), generateScaleTestServiceSpec(suffix), metav1.CreateOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
ingCreated, err := f.Clientset.NetworkingV1beta1().Ingresses(f.Namespace).Create(context.TODO(), generateScaleTestIngressSpec(suffix, enableTLS), metav1.CreateOptions{})
|
ingCreated, err := f.Clientset.NetworkingV1().Ingresses(f.Namespace).Create(context.TODO(), generateScaleTestIngressSpec(suffix, enableTLS), metav1.CreateOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
return svcCreated, ingCreated, nil
|
return svcCreated, ingCreated, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateScaleTestIngressSpec(suffix string, enableTLS bool) *networkingv1beta1.Ingress {
|
func generateScaleTestIngressSpec(suffix string, enableTLS bool) *networkingv1.Ingress {
|
||||||
ing := &networkingv1beta1.Ingress{
|
ing := &networkingv1.Ingress{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: fmt.Sprintf("%s-%s", scaleTestIngressNamePrefix, suffix),
|
Name: fmt.Sprintf("%s-%s", scaleTestIngressNamePrefix, suffix),
|
||||||
},
|
},
|
||||||
Spec: networkingv1beta1.IngressSpec{
|
Spec: networkingv1.IngressSpec{
|
||||||
TLS: []networkingv1beta1.IngressTLS{
|
TLS: []networkingv1.IngressTLS{
|
||||||
{SecretName: scaleTestSecretName},
|
{SecretName: scaleTestSecretName},
|
||||||
},
|
},
|
||||||
Rules: []networkingv1beta1.IngressRule{
|
Rules: []networkingv1.IngressRule{
|
||||||
{
|
{
|
||||||
Host: scaleTestHostname,
|
Host: scaleTestHostname,
|
||||||
IngressRuleValue: networkingv1beta1.IngressRuleValue{
|
IngressRuleValue: networkingv1.IngressRuleValue{
|
||||||
HTTP: &networkingv1beta1.HTTPIngressRuleValue{
|
HTTP: &networkingv1.HTTPIngressRuleValue{
|
||||||
Paths: []networkingv1beta1.HTTPIngressPath{
|
Paths: []networkingv1.HTTPIngressPath{
|
||||||
{
|
{
|
||||||
Path: "/scale",
|
Path: "/scale",
|
||||||
Backend: networkingv1beta1.IngressBackend{
|
Backend: networkingv1.IngressBackend{
|
||||||
ServiceName: fmt.Sprintf("%s-%s", scaleTestBackendName, suffix),
|
Service: &networkingv1.IngressServiceBackend{
|
||||||
ServicePort: intstr.IntOrString{
|
Name: fmt.Sprintf("%s-%s", scaleTestBackendName, suffix),
|
||||||
Type: intstr.Int,
|
Port: networkingv1.ServiceBackendPort{
|
||||||
IntVal: 80,
|
Number: 80,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -413,7 +416,7 @@ func generateScaleTestIngressSpec(suffix string, enableTLS bool) *networkingv1be
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
if enableTLS {
|
if enableTLS {
|
||||||
ing.Spec.TLS = []networkingv1beta1.IngressTLS{
|
ing.Spec.TLS = []networkingv1.IngressTLS{
|
||||||
{SecretName: scaleTestSecretName},
|
{SecretName: scaleTestSecretName},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
apiVersion: networking.k8s.io/v1beta1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
name: static-ip
|
name: static-ip
|
||||||
@ -11,6 +11,9 @@ spec:
|
|||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: /foo
|
- path: /foo
|
||||||
|
pathType: "Prefix"
|
||||||
backend:
|
backend:
|
||||||
serviceName: echoheaders-https
|
service:
|
||||||
servicePort: 80
|
name: echoheaders-https
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
@ -1,28 +1,40 @@
|
|||||||
apiVersion: networking.k8s.io/v1beta1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
name: echomap
|
name: echomap
|
||||||
spec:
|
spec:
|
||||||
# kubemci requires a default backend.
|
# kubemci requires a default backend.
|
||||||
backend:
|
defaultBackend:
|
||||||
serviceName: echoheadersx
|
service:
|
||||||
servicePort: 80
|
name: echoheadersx
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
rules:
|
rules:
|
||||||
- host: foo.bar.com
|
- host: foo.bar.com
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: /foo
|
- path: /foo
|
||||||
|
pathType: "Prefix"
|
||||||
backend:
|
backend:
|
||||||
serviceName: echoheadersx
|
service:
|
||||||
servicePort: 80
|
name: echoheadersx
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
- host: bar.baz.com
|
- host: bar.baz.com
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: /bar
|
- path: /bar
|
||||||
|
pathType: "Prefix"
|
||||||
backend:
|
backend:
|
||||||
serviceName: echoheadersy
|
service:
|
||||||
servicePort: 80
|
name: echoheadersy
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
- path: /foo
|
- path: /foo
|
||||||
|
pathType: "Prefix"
|
||||||
backend:
|
backend:
|
||||||
serviceName: echoheadersx
|
service:
|
||||||
servicePort: 80
|
name: echoheadersx
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
apiVersion: networking.k8s.io/v1beta1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
name: echomap
|
name: echomap
|
||||||
spec:
|
spec:
|
||||||
# kubemci requires a default backend.
|
# kubemci requires a default backend.
|
||||||
backend:
|
defaultBackend:
|
||||||
serviceName: echoheaders
|
service:
|
||||||
servicePort: 443
|
name: echoheaders
|
||||||
|
port:
|
||||||
|
number: 443
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
apiVersion: networking.k8s.io/v1beta1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
name: multiple-certs
|
name: multiple-certs
|
||||||
@ -8,27 +8,39 @@ spec:
|
|||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: /test
|
- path: /test
|
||||||
|
pathType: "Prefix"
|
||||||
backend:
|
backend:
|
||||||
serviceName: echoheaders-https
|
service:
|
||||||
servicePort: 80
|
name: echoheaders-https
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
- host: test2.ingress.com
|
- host: test2.ingress.com
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: /test
|
- path: /test
|
||||||
|
pathType: "Prefix"
|
||||||
backend:
|
backend:
|
||||||
serviceName: echoheaders-https
|
service:
|
||||||
servicePort: 80
|
name: echoheaders-https
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
- host: test3.ingress.com
|
- host: test3.ingress.com
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: /test
|
- path: /test
|
||||||
|
pathType: "Prefix"
|
||||||
backend:
|
backend:
|
||||||
serviceName: echoheaders-https
|
service:
|
||||||
servicePort: 80
|
name: echoheaders-https
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
- host: test4.ingress.com
|
- host: test4.ingress.com
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: /test
|
- path: /test
|
||||||
|
pathType: "Prefix"
|
||||||
backend:
|
backend:
|
||||||
serviceName: echoheaders-https
|
service:
|
||||||
servicePort: 80
|
name: echoheaders-https
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
apiVersion: networking.k8s.io/v1beta1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
name: hostname
|
name: hostname
|
||||||
spec:
|
spec:
|
||||||
backend:
|
defaultBackend:
|
||||||
serviceName: hostname
|
service:
|
||||||
servicePort: 80
|
name: hostname
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
apiVersion: networking.k8s.io/v1beta1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
name: hostname
|
name: hostname
|
||||||
spec:
|
spec:
|
||||||
backend:
|
defaultBackend:
|
||||||
serviceName: hostname
|
service:
|
||||||
servicePort: 80
|
name: hostname
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
apiVersion: networking.k8s.io/v1beta1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
name: hostname
|
name: hostname
|
||||||
spec:
|
spec:
|
||||||
backend:
|
defaultBackend:
|
||||||
serviceName: hostname
|
service:
|
||||||
servicePort: 80
|
name: hostname
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
@ -17,7 +17,19 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
terminationGracePeriodSeconds: 0
|
terminationGracePeriodSeconds: 0
|
||||||
containers:
|
containers:
|
||||||
- image: k8s.gcr.io/nginx-ingress-controller:0.9.0-beta.1
|
- image: k8s.gcr.io/ingress-nginx/controller:v0.46.0
|
||||||
|
args:
|
||||||
|
- /nginx-ingress-controller
|
||||||
|
- --election-id=ingress-controller-leader
|
||||||
|
- --ingress-class=nginx
|
||||||
|
securityContext:
|
||||||
|
capabilities:
|
||||||
|
drop:
|
||||||
|
- ALL
|
||||||
|
add:
|
||||||
|
- NET_BIND_SERVICE
|
||||||
|
runAsUser: 101
|
||||||
|
allowPrivilegeEscalation: true
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
path: /healthz
|
path: /healthz
|
||||||
@ -41,11 +53,3 @@ spec:
|
|||||||
hostPort: 80
|
hostPort: 80
|
||||||
- containerPort: 443
|
- containerPort: 443
|
||||||
hostPort: 443
|
hostPort: 443
|
||||||
# we expose 18080 to access nginx stats in url /nginx-status
|
|
||||||
# this is optional
|
|
||||||
- containerPort: 18080
|
|
||||||
hostPort: 18080
|
|
||||||
args:
|
|
||||||
- /nginx-ingress-controller
|
|
||||||
- --default-backend-service=kube-system/default-http-backend
|
|
||||||
- --publish-service=$(POD_NAMESPACE)/nginx-ingress-lb
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
apiVersion: networking.k8s.io/v1beta1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
name: pre-shared-cert
|
name: pre-shared-cert
|
||||||
@ -7,14 +7,20 @@ metadata:
|
|||||||
# ingress.gcp.kubernetes.io/pre-shared-cert: "test-pre-shared-cert"
|
# ingress.gcp.kubernetes.io/pre-shared-cert: "test-pre-shared-cert"
|
||||||
spec:
|
spec:
|
||||||
# kubemci requires a default backend.
|
# kubemci requires a default backend.
|
||||||
backend:
|
defaultBackend:
|
||||||
serviceName: echoheaders-https
|
service:
|
||||||
servicePort: 80
|
name: echoheaders-https
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
rules:
|
rules:
|
||||||
- host: test.ingress.com
|
- host: test.ingress.com
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: /test
|
- path: /test
|
||||||
|
pathType: "Prefix"
|
||||||
backend:
|
backend:
|
||||||
serviceName: echoheaders-https
|
service:
|
||||||
servicePort: 80
|
name: echoheaders-https
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
apiVersion: networking.k8s.io/v1beta1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
name: static-ip
|
name: static-ip
|
||||||
@ -10,6 +10,8 @@ spec:
|
|||||||
# This assumes tls-secret exists.
|
# This assumes tls-secret exists.
|
||||||
# To generate it run the make in this directory.
|
# To generate it run the make in this directory.
|
||||||
- secretName: tls-secret
|
- secretName: tls-secret
|
||||||
backend:
|
defaultBackend:
|
||||||
serviceName: echoheaders-https
|
service:
|
||||||
servicePort: 80
|
name: echoheaders-https
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
@ -3,9 +3,11 @@ kind: Ingress
|
|||||||
metadata:
|
metadata:
|
||||||
name: example
|
name: example
|
||||||
spec:
|
spec:
|
||||||
backend:
|
defaultBackend:
|
||||||
serviceName: default-backend
|
service:
|
||||||
servicePort: 80
|
name: default-backend
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
rules:
|
rules:
|
||||||
- http:
|
- http:
|
||||||
paths:
|
paths:
|
||||||
|
Loading…
Reference in New Issue
Block a user