diff --git a/test/e2e/framework/deployment.go b/test/e2e/framework/deployment.go index 4627a8892..b54cd4775 100644 --- a/test/e2e/framework/deployment.go +++ b/test/e2e/framework/deployment.go @@ -427,7 +427,7 @@ func (f *Framework) NewDeployment(name, image string, port int32, replicas int32 f.NewDeploymentWithOpts(name, image, port, replicas, nil, nil, nil, nil, nil, true) } -// NewDeployment creates a new deployment in a particular namespace. +// NewDeploymentWithOpts NewDeployment creates a new deployment in a particular namespace. func (f *Framework) NewDeploymentWithOpts(name, image string, port int32, replicas int32, command []string, args []string, env []corev1.EnvVar, volumeMounts []corev1.VolumeMount, volumes []corev1.Volume, setProbe bool) { deployment := newDeployment(name, f.Namespace, image, port, replicas, command, args, env, volumeMounts, volumes, setProbe) diff --git a/test/e2e/servicebackend/service_externalname.go b/test/e2e/servicebackend/service_externalname.go index 0d121c671..1865e27fc 100644 --- a/test/e2e/servicebackend/service_externalname.go +++ b/test/e2e/servicebackend/service_externalname.go @@ -38,11 +38,11 @@ import ( func buildHTTPBinExternalNameService(f *framework.Framework, portName string) *corev1.Service { return &corev1.Service{ ObjectMeta: metav1.ObjectMeta{ - Name: framework.HTTPBinService, + Name: "neverssl", Namespace: f.Namespace, }, Spec: corev1.ServiceSpec{ - ExternalName: "httpbin.org", + ExternalName: "neverssl.com", Type: corev1.ServiceTypeExternalName, Ports: []corev1.ServicePort{ { @@ -56,17 +56,17 @@ func buildHTTPBinExternalNameService(f *framework.Framework, portName string) *c } } -var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { +var _ = framework.IngressNginxDescribe("[Service] type=ExternalName", func() { f := framework.NewDefaultFramework("type-externalname") - ginkgo.It("works with external name set to incomplete fqdn", func() { + ginkgo.It("works with type=ExternalName set to incomplete fqdn", func() { f.NewEchoDeployment() host := "echo" svc := &corev1.Service{ ObjectMeta: metav1.ObjectMeta{ - Name: framework.HTTPBinService, + Name: "neverssl", Namespace: f.Namespace, }, Spec: corev1.ServiceSpec{ @@ -77,7 +77,7 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { f.EnsureService(svc) - ing := framework.NewSingleIngress(host, "/", host, f.Namespace, framework.HTTPBinService, 80, nil) + ing := framework.NewSingleIngress(host, "/", host, f.Namespace, "neverssl", 80, nil) f.EnsureIngress(ing) f.WaitForNginxServer(host, @@ -97,11 +97,11 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { svc := &corev1.Service{ ObjectMeta: metav1.ObjectMeta{ - Name: framework.HTTPBinService, + Name: "neverssl", Namespace: f.Namespace, }, Spec: corev1.ServiceSpec{ - ExternalName: "httpbin.org", + ExternalName: "neverssl.com", Type: corev1.ServiceTypeExternalName, }, } @@ -109,9 +109,9 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { f.EnsureService(svc) annotations := map[string]string{ - "nginx.ingress.kubernetes.io/upstream-vhost": "httpbin.org", + "nginx.ingress.kubernetes.io/upstream-vhost": "neverssl.com", } - ing := framework.NewSingleIngress(host, "/", host, f.Namespace, framework.HTTPBinService, 80, annotations) + ing := framework.NewSingleIngress(host, "/", host, f.Namespace, "neverssl", 80, annotations) f.EnsureIngress(ing) f.WaitForNginxServer(host, @@ -120,7 +120,7 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { }) f.HTTPTestClient(). - GET("/get"). + GET("/"). WithHeader("Host", host). Expect(). Status(http.StatusOK) @@ -133,9 +133,9 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { f.EnsureService(svc) annotations := map[string]string{ - "nginx.ingress.kubernetes.io/upstream-vhost": "httpbin.org", + "nginx.ingress.kubernetes.io/upstream-vhost": "neverssl.com", } - ing := framework.NewSingleIngress(host, "/", host, f.Namespace, framework.HTTPBinService, 80, annotations) + ing := framework.NewSingleIngress(host, "/", host, f.Namespace, "neverssl", 80, annotations) f.EnsureIngress(ing) f.WaitForNginxServer(host, @@ -144,7 +144,7 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { }) f.HTTPTestClient(). - GET("/get"). + GET("/"). WithHeader("Host", host). Expect(). Status(http.StatusOK) @@ -155,7 +155,7 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { svc := &corev1.Service{ ObjectMeta: metav1.ObjectMeta{ - Name: framework.HTTPBinService, + Name: "neverssl", Namespace: f.Namespace, }, Spec: corev1.ServiceSpec{ @@ -166,7 +166,7 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { f.EnsureService(svc) - ing := framework.NewSingleIngress(host, "/", host, f.Namespace, framework.HTTPBinService, 80, nil) + ing := framework.NewSingleIngress(host, "/", host, f.Namespace, "neverssl", 80, nil) f.EnsureIngress(ing) f.WaitForNginxServer(host, @@ -175,7 +175,7 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { }) f.HTTPTestClient(). - GET("/get"). + GET("/"). WithHeader("Host", host). Expect(). StatusRange(httpexpect.Status5xx) @@ -188,12 +188,12 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { f.EnsureService(svc) annotations := map[string]string{ - "nginx.ingress.kubernetes.io/upstream-vhost": "httpbin.org", + "nginx.ingress.kubernetes.io/upstream-vhost": "neverssl.com", } - ing := framework.NewSingleIngress(host, "/", host, f.Namespace, framework.HTTPBinService, 80, annotations) + ing := framework.NewSingleIngress(host, "/", host, f.Namespace, "neverssl", 80, annotations) namedBackend := networking.IngressBackend{ Service: &networking.IngressServiceBackend{ - Name: framework.HTTPBinService, + Name: "neverssl", Port: networking.ServiceBackendPort{ Name: host, }, @@ -208,7 +208,7 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { }) f.HTTPTestClient(). - GET("/get"). + GET("/"). WithHeader("Host", host). Expect(). Status(http.StatusOK) @@ -219,18 +219,19 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { svc := &corev1.Service{ ObjectMeta: metav1.ObjectMeta{ - Name: framework.HTTPBinService, + Name: "neverssl", Namespace: f.Namespace, }, Spec: corev1.ServiceSpec{ - ExternalName: "httpbin.org.", + ExternalName: "github.com.", Type: corev1.ServiceTypeExternalName, }, } f.EnsureService(svc) - ing := framework.NewSingleIngress(host, "/", host, f.Namespace, framework.HTTPBinService, 80, nil) + ing := framework.NewSingleIngress(host, "/", host, f.Namespace, "neverssl", 80, nil) + f.EnsureIngress(ing) f.WaitForNginxServer(host, @@ -239,25 +240,25 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { }) f.HTTPTestClient(). - GET("/get"). + GET("/"). WithHeader("Host", host). Expect(). - Status(http.StatusOK) + Status(http.StatusMovedPermanently) }) - ginkgo.It("should update the external name after a service update", func() { + ginkgo.It("should update the type=ExternalName after a service update", func() { host := "echo" svc := buildHTTPBinExternalNameService(f, host) f.EnsureService(svc) annotations := map[string]string{ - "nginx.ingress.kubernetes.io/upstream-vhost": "httpbin.org", + "nginx.ingress.kubernetes.io/upstream-vhost": "neverssl.com", } - ing := framework.NewSingleIngress(host, "/", host, f.Namespace, framework.HTTPBinService, 80, annotations) + ing := framework.NewSingleIngress(host, "/", host, f.Namespace, "neverssl", 80, annotations) namedBackend := networking.IngressBackend{ Service: &networking.IngressServiceBackend{ - Name: framework.HTTPBinService, + Name: "neverssl", Port: networking.ServiceBackendPort{ Name: host, }, @@ -272,27 +273,27 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { }) body := f.HTTPTestClient(). - GET("/get"). + GET("/"). WithHeader("Host", host). Expect(). Status(http.StatusOK). Body(). Raw() - assert.Contains(ginkgo.GinkgoT(), body, `"X-Forwarded-Host": "echo"`) + assert.Contains(ginkgo.GinkgoT(), body, `"neverssl.com"`) - svc, err := f.KubeClientSet.CoreV1().Services(f.Namespace).Get(context.TODO(), framework.HTTPBinService, metav1.GetOptions{}) - assert.Nil(ginkgo.GinkgoT(), err, "unexpected error obtaining httpbin service") + svc, err := f.KubeClientSet.CoreV1().Services(f.Namespace).Get(context.TODO(), "neverssl", metav1.GetOptions{}) + assert.Nil(ginkgo.GinkgoT(), err, "unexpected error obtaining service") - svc.Spec.ExternalName = "eu.httpbin.org" + svc.Spec.ExternalName = "google.com" _, err = f.KubeClientSet.CoreV1().Services(f.Namespace).Update(context.Background(), svc, metav1.UpdateOptions{}) - assert.Nil(ginkgo.GinkgoT(), err, "unexpected error updating httpbin service") + assert.Nil(ginkgo.GinkgoT(), err, "unexpected error updating service") framework.Sleep() body = f.HTTPTestClient(). - GET("/get"). + GET("/"). WithHeader("Host", host). Expect(). Status(http.StatusOK). @@ -301,18 +302,18 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { assert.Contains(ginkgo.GinkgoT(), body, `"X-Forwarded-Host": "echo"`) - ginkgo.By("checking the service is updated to use eu.httpbin.org") + ginkgo.By("checking the service is updated to use google.com") curlCmd := fmt.Sprintf("curl --fail --silent http://localhost:%v/configuration/backends", nginx.StatusPort) output, err := f.ExecIngressPod(curlCmd) assert.Nil(ginkgo.GinkgoT(), err) - assert.Contains(ginkgo.GinkgoT(), output, `{"address":"eu.httpbin.org"`) + assert.Contains(ginkgo.GinkgoT(), output, `{"address":"google.com"`) }) - ginkgo.It("should sync ingress on external name service addition/deletion", func() { + ginkgo.It("should sync ingress on type=ExternalName service addition/deletion", func() { host := "echo" // Create the Ingress first - ing := framework.NewSingleIngress(host, "/", host, f.Namespace, framework.HTTPBinService, 80, nil) + ing := framework.NewSingleIngress(host, "/", host, f.Namespace, "neverssl", 80, nil) f.EnsureIngress(ing) f.WaitForNginxServer(host, @@ -322,7 +323,7 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { // Nginx should return 503 without the underlying service being available f.HTTPTestClient(). - GET("/get"). + GET("/"). WithHeader("Host", host). Expect(). Status(http.StatusServiceUnavailable) @@ -335,20 +336,19 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { // 503 should change to 200 OK f.HTTPTestClient(). - GET("/get"). + GET("/"). WithHeader("Host", host). Expect(). Status(http.StatusOK) // And back to 503 after deleting the service - - err := f.KubeClientSet.CoreV1().Services(f.Namespace).Delete(context.TODO(), framework.HTTPBinService, metav1.DeleteOptions{}) - assert.Nil(ginkgo.GinkgoT(), err, "unexpected error deleting httpbin service") + err := f.KubeClientSet.CoreV1().Services(f.Namespace).Delete(context.TODO(), "neverssl", metav1.DeleteOptions{}) + assert.Nil(ginkgo.GinkgoT(), err, "unexpected error deleting service") framework.Sleep() f.HTTPTestClient(). - GET("/get"). + GET("/"). WithHeader("Host", host). Expect(). Status(http.StatusServiceUnavailable) diff --git a/test/junitreports/report-e2e-test-suite.xml b/test/junitreports/report-e2e-test-suite.xml new file mode 100644 index 000000000..88baed953 --- /dev/null +++ b/test/junitreports/report-e2e-test-suite.xml @@ -0,0 +1,1308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > Enter [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:44.933 < Exit [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:54.223 (9.29s) > Enter [It] should return 200 for service type=ExternalName with a port defined - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:129 @ 04/26/23 18:14:54.223 [FAILED] Failure recorded during attempt 1: Error Trace: /go/src/k8s.io/ingress-nginx/test/e2e/framework/httpexpect/reporter.go:47 /go/src/k8s.io/ingress-nginx/test/e2e/framework/httpexpect/chain.go:37 /go/src/k8s.io/ingress-nginx/test/e2e/framework/httpexpect/response.go:262 /go/src/k8s.io/ingress-nginx/test/e2e/framework/httpexpect/response.go:79 /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:150 /go/src/k8s.io/ingress-nginx/.modcache/github.com/onsi/ginkgo/v2@v2.9.0/internal/node.go:463 /go/src/k8s.io/ingress-nginx/.modcache/github.com/onsi/ginkgo/v2@v2.9.0/internal/suite.go:863 /usr/local/go/src/runtime/asm_amd64.s:1598 Error: expected status equal to: "200 OK" but got: "504 Gateway Timeout" Test: [Service] type=ExternalName should return 200 for service type=ExternalName with a port defined In [It] at: /go/src/k8s.io/ingress-nginx/test/e2e/framework/httpexpect/reporter.go:47 @ 04/26/23 18:15:14.416 < Exit [It] should return 200 for service type=ExternalName with a port defined - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:129 @ 04/26/23 18:15:14.416 (20.194s) > Enter [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:14.416 STEP: Dumping NGINX configuration after failure - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:172 @ 04/26/23 18:15:14.496 Apr 26 18:15:14.496: INFO: # Configuration checksum: 4195219159642437490 # setup custom paths that do not require root access pid /tmp/nginx/nginx.pid; daemon off; worker_processes 1; worker_rlimit_nofile 1073740792; worker_shutdown_timeout 240s ; events { multi_accept on; worker_connections 16384; use epoll; } http { lua_package_path "/etc/nginx/lua/?.lua;;"; lua_shared_dict balancer_ewma 10M; lua_shared_dict balancer_ewma_last_touched_at 10M; lua_shared_dict balancer_ewma_locks 1M; lua_shared_dict certificate_data 20M; lua_shared_dict certificate_servers 5M; lua_shared_dict configuration_data 20M; lua_shared_dict global_throttle_cache 10M; lua_shared_dict ocsp_response_cache 5M; init_by_lua_block { collectgarbage("collect") -- init modules local ok, res ok, res = pcall(require, "lua_ingress") if not ok then error("require failed: " .. tostring(res)) else lua_ingress = res lua_ingress.set_config({ use_forwarded_headers = false, use_proxy_protocol = false, is_ssl_passthrough_enabled = false, http_redirect_code = 308, listen_ports = { ssl_proxy = "442", https = "443" }, hsts = true, hsts_max_age = 15724800, hsts_include_subdomains = true, hsts_preload = false, global_throttle = { memcached = { host = "", port = 11211, connect_timeout = 50, max_idle_timeout = 10000, pool_size = 50, }, status_code = 429, } }) end ok, res = pcall(require, "configuration") if not ok then error("require failed: " .. tostring(res)) else configuration = res configuration.prohibited_localhost_port = '10246' end ok, res = pcall(require, "balancer") if not ok then error("require failed: " .. tostring(res)) else balancer = res end ok, res = pcall(require, "monitor") if not ok then error("require failed: " .. tostring(res)) else monitor = res end ok, res = pcall(require, "certificate") if not ok then error("require failed: " .. tostring(res)) else certificate = res certificate.is_ocsp_stapling_enabled = false end ok, res = pcall(require, "plugins") if not ok then error("require failed: " .. tostring(res)) else plugins = res end -- load all plugins that'll be used here plugins.init({ }) } init_worker_by_lua_block { lua_ingress.init_worker() balancer.init_worker() monitor.init_worker(10000) plugins.run() } geoip_country /etc/nginx/geoip/GeoIP.dat; geoip_city /etc/nginx/geoip/GeoLiteCity.dat; geoip_org /etc/nginx/geoip/GeoIPASNum.dat; geoip_proxy_recursive on; aio threads; aio_write on; tcp_nopush on; tcp_nodelay on; log_subrequest on; reset_timedout_connection on; keepalive_timeout 75s; keepalive_requests 1000; client_body_temp_path /tmp/nginx/client-body; fastcgi_temp_path /tmp/nginx/fastcgi-temp; proxy_temp_path /tmp/nginx/proxy-temp; ajp_temp_path /tmp/nginx/ajp-temp; client_header_buffer_size 1k; client_header_timeout 60s; large_client_header_buffers 4 8k; client_body_buffer_size 8k; client_body_timeout 60s; http2_max_field_size 4k; http2_max_header_size 16k; http2_max_requests 1000; http2_max_concurrent_streams 128; types_hash_max_size 2048; server_names_hash_max_size 1024; server_names_hash_bucket_size 32; map_hash_bucket_size 64; proxy_headers_hash_max_size 512; proxy_headers_hash_bucket_size 64; variables_hash_bucket_size 256; variables_hash_max_size 2048; underscores_in_headers off; ignore_invalid_headers on; limit_req_status 503; limit_conn_status 503; include /etc/nginx/mime.types; default_type text/html; # Custom headers for response server_tokens off; more_clear_headers Server; # disable warnings uninitialized_variable_warn off; # Additional available variables: # $namespace # $ingress_name # $service_name # $service_port log_format upstreaminfo '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_length $request_time [$proxy_upstream_name] [$proxy_alternative_upstream_name] $upstream_addr $upstream_response_length $upstream_response_time $upstream_status $req_id'; map $request_uri $loggable { default 1; } access_log /var/log/nginx/access.log upstreaminfo if=$loggable; error_log /var/log/nginx/error.log notice; resolver 10.96.0.10 valid=30s; # See https://www.nginx.com/blog/websocket-nginx map $http_upgrade $connection_upgrade { default upgrade; # See http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive '' ''; } # Reverse proxies can detect if a client provides a X-Request-ID header, and pass it on to the backend server. # If no such header is provided, it can provide a random value. map $http_x_request_id $req_id { default $http_x_request_id; "" $request_id; } # Create a variable that contains the literal $ character. # This works because the geo module will not resolve variables. geo $literal_dollar { default "$"; } server_name_in_redirect off; port_in_redirect off; ssl_protocols TLSv1.2 TLSv1.3; ssl_early_data off; # turn on session caching to drastically improve performance ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # allow configuring ssl session tickets ssl_session_tickets off; # slightly reduce the time-to-first-byte ssl_buffer_size 4k; # allow configuring custom ssl ciphers ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers on; ssl_ecdh_curve auto; # PEM sha: 6e043501fda50a4225f2addf171ef02aa04c8353 ssl_certificate /etc/ingress-controller/ssl/default-fake-certificate.pem; ssl_certificate_key /etc/ingress-controller/ssl/default-fake-certificate.pem; proxy_ssl_session_reuse on; upstream upstream_balancer { ### Attention!!! # # We no longer create "upstream" section for every backend. # Backends are handled dynamically using Lua. If you would like to debug # and see what backends ingress-nginx has in its memory you can # install our kubectl plugin https://kubernetes.github.io/ingress-nginx/kubectl-plugin. # Once you have the plugin you can use "kubectl ingress-nginx backends" command to # inspect current backends. # ### server 0.0.0.1; # placeholder balancer_by_lua_block { balancer.balance() } keepalive 320; keepalive_time 1h; keepalive_timeout 60s; keepalive_requests 10000; } # Cache for internal auth checks proxy_cache_path /tmp/nginx/nginx-cache-auth levels=1:2 keys_zone=auth_cache:10m max_size=128m inactive=30m use_temp_path=off; # Global filters ## start server _ server { server_name _ ; listen 80 default_server reuseport backlog=4096 ; listen [::]:80 default_server reuseport backlog=4096 ; listen 443 default_server reuseport backlog=4096 ssl http2 ; listen [::]:443 default_server reuseport backlog=4096 ssl http2 ; set $proxy_upstream_name "-"; ssl_reject_handshake off; ssl_certificate_by_lua_block { certificate.call() } location / { set $namespace ""; set $ingress_name ""; set $service_name ""; set $service_port ""; set $location_path ""; set $global_rate_limit_exceeding n; rewrite_by_lua_block { lua_ingress.rewrite({ force_ssl_redirect = false, ssl_redirect = false, force_no_ssl_redirect = false, preserve_trailing_slash = false, use_port_in_redirects = false, global_throttle = { namespace = "", limit = 0, window_size = 0, key = { }, ignored_cidrs = { } }, }) balancer.rewrite() plugins.run() } # be careful with `access_by_lua_block` and `satisfy any` directives as satisfy any # will always succeed when there's `access_by_lua_block` that does not have any lua code doing `ngx.exit(ngx.DECLINED)` # other authentication method such as basic auth or external auth useless - all requests will be allowed. #access_by_lua_block { #} header_filter_by_lua_block { lua_ingress.header() plugins.run() } body_filter_by_lua_block { plugins.run() } log_by_lua_block { balancer.log() monitor.call() plugins.run() } access_log off; port_in_redirect off; set $balancer_ewma_score -1; set $proxy_upstream_name "upstream-default-backend"; set $proxy_host $proxy_upstream_name; set $pass_access_scheme $scheme; set $pass_server_port $server_port; set $best_http_host $http_host; set $pass_port $pass_server_port; set $proxy_alternative_upstream_name ""; client_max_body_size 1m; proxy_set_header Host $best_http_host; # Pass the extracted client certificate to the backend # Allow websocket connections proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header X-Request-ID $req_id; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $best_http_host; proxy_set_header X-Forwarded-Port $pass_port; proxy_set_header X-Forwarded-Proto $pass_access_scheme; proxy_set_header X-Forwarded-Scheme $pass_access_scheme; proxy_set_header X-Scheme $pass_access_scheme; # Pass the original X-Forwarded-For proxy_set_header X-Original-Forwarded-For $http_x_forwarded_for; # mitigate HTTPoxy Vulnerability # https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/ proxy_set_header Proxy ""; # Custom headers to proxied server proxy_connect_timeout 5s; proxy_send_timeout 60s; proxy_read_timeout 60s; proxy_buffering off; proxy_buffer_size 4k; proxy_buffers 4 4k; proxy_max_temp_file_size 1024m; proxy_request_buffering on; proxy_http_version 1.1; proxy_cookie_domain off; proxy_cookie_path off; # In case of errors try the next upstream server before returning an error proxy_next_upstream error timeout; proxy_next_upstream_timeout 0; proxy_next_upstream_tries 3; proxy_pass http://upstream_balancer; proxy_redirect off; } # health checks in cloud providers require the use of port 80 location /healthz { access_log off; return 200; } # this is required to avoid error if nginx is being monitored # with an external software (like sysdig) location /nginx_status { allow 127.0.0.1; allow ::1; deny all; access_log off; stub_status on; } } ## end server _ ## start server echo server { server_name echo ; listen 80 ; listen [::]:80 ; listen 443 ssl http2 ; listen [::]:443 ssl http2 ; set $proxy_upstream_name "-"; ssl_certificate_by_lua_block { certificate.call() } location / { set $namespace "e2e-tests-type-externalname-1682532884933614881-brsxh"; set $ingress_name "echo"; set $service_name "httpbin"; set $service_port "80"; set $location_path "/"; set $global_rate_limit_exceeding n; rewrite_by_lua_block { lua_ingress.rewrite({ force_ssl_redirect = false, ssl_redirect = true, force_no_ssl_redirect = false, preserve_trailing_slash = false, use_port_in_redirects = false, global_throttle = { namespace = "", limit = 0, window_size = 0, key = { }, ignored_cidrs = { } }, }) balancer.rewrite() plugins.run() } # be careful with `access_by_lua_block` and `satisfy any` directives as satisfy any # will always succeed when there's `access_by_lua_block` that does not have any lua code doing `ngx.exit(ngx.DECLINED)` # other authentication method such as basic auth or external auth useless - all requests will be allowed. #access_by_lua_block { #} header_filter_by_lua_block { lua_ingress.header() plugins.run() } body_filter_by_lua_block { plugins.run() } log_by_lua_block { balancer.log() monitor.call() plugins.run() } port_in_redirect off; set $balancer_ewma_score -1; set $proxy_upstream_name "e2e-tests-type-externalname-1682532884933614881-brsxh-httpbin-80"; set $proxy_host $proxy_upstream_name; set $pass_access_scheme $scheme; set $pass_server_port $server_port; set $best_http_host $http_host; set $pass_port $pass_server_port; set $proxy_alternative_upstream_name ""; client_max_body_size 1m; proxy_set_header Host "httpbin.org"; # Pass the extracted client certificate to the backend # Allow websocket connections proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header X-Request-ID $req_id; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $best_http_host; proxy_set_header X-Forwarded-Port $pass_port; proxy_set_header X-Forwarded-Proto $pass_access_scheme; proxy_set_header X-Forwarded-Scheme $pass_access_scheme; proxy_set_header X-Scheme $pass_access_scheme; # Pass the original X-Forwarded-For proxy_set_header X-Original-Forwarded-For $http_x_forwarded_for; # mitigate HTTPoxy Vulnerability # https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/ proxy_set_header Proxy ""; # Custom headers to proxied server proxy_connect_timeout 5s; proxy_send_timeout 60s; proxy_read_timeout 60s; proxy_buffering off; proxy_buffer_size 4k; proxy_buffers 4 4k; proxy_max_temp_file_size 1024m; proxy_request_buffering on; proxy_http_version 1.1; proxy_cookie_domain off; proxy_cookie_path off; # In case of errors try the next upstream server before returning an error proxy_next_upstream error timeout; proxy_next_upstream_timeout 0; proxy_next_upstream_tries 3; proxy_pass http://upstream_balancer; proxy_redirect off; } } ## end server echo # backend for when default-backend-service is not configured or it does not have endpoints server { listen 8181 default_server reuseport backlog=4096; listen [::]:8181 default_server reuseport backlog=4096; set $proxy_upstream_name "internal"; access_log off; location / { return 404; } } # default server, used for NGINX healthcheck and access to nginx stats server { listen 127.0.0.1:10246; set $proxy_upstream_name "internal"; keepalive_timeout 0; gzip off; access_log off; location /healthz { return 200; } location /is-dynamic-lb-initialized { content_by_lua_block { local configuration = require("configuration") local backend_data = configuration.get_backends_data() if not backend_data then ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR) return end ngx.say("OK") ngx.exit(ngx.HTTP_OK) } } location /nginx_status { stub_status on; } location /configuration { client_max_body_size 21M; client_body_buffer_size 21M; proxy_buffering off; content_by_lua_block { configuration.call() } } location / { content_by_lua_block { ngx.exit(ngx.HTTP_NOT_FOUND) } } } } stream { lua_package_path "/etc/nginx/lua/?.lua;/etc/nginx/lua/vendor/?.lua;;"; lua_shared_dict tcp_udp_configuration_data 5M; resolver 10.96.0.10 valid=30s; init_by_lua_block { collectgarbage("collect") -- init modules local ok, res ok, res = pcall(require, "configuration") if not ok then error("require failed: " .. tostring(res)) else configuration = res end ok, res = pcall(require, "tcp_udp_configuration") if not ok then error("require failed: " .. tostring(res)) else tcp_udp_configuration = res tcp_udp_configuration.prohibited_localhost_port = '10246' end ok, res = pcall(require, "tcp_udp_balancer") if not ok then error("require failed: " .. tostring(res)) else tcp_udp_balancer = res end } init_worker_by_lua_block { tcp_udp_balancer.init_worker() } lua_add_variable $proxy_upstream_name; log_format log_stream '[$remote_addr] [$time_local] $protocol $status $bytes_sent $bytes_received $session_time'; access_log /var/log/nginx/access.log log_stream ; error_log /var/log/nginx/error.log notice; upstream upstream_balancer { server 0.0.0.1:1234; # placeholder balancer_by_lua_block { tcp_udp_balancer.balance() } } server { listen 127.0.0.1:10247; access_log off; content_by_lua_block { tcp_udp_configuration.call() } } # TCP services # UDP services # Stream Snippets } STEP: Dumping NGINX logs - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:181 @ 04/26/23 18:15:17.501 Apr 26 18:15:17.501: INFO: ------------------------------------------------------------------------------- NGINX Ingress controller Release: 1.0.0-dev Build: git-fa44f2f7c Repository: git@github.com:kubernetes/ingress-nginx.git nginx version: nginx/1.21.6 ------------------------------------------------------------------------------- W0426 18:14:49.907769 13 client_config.go:618] Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work. I0426 18:14:49.907833 13 main.go:209] "Creating API client" host="https://10.96.0.1:443" I0426 18:14:49.909984 13 main.go:253] "Running in Kubernetes cluster" major="1" minor="26" git="v1.26.3" state="clean" commit="9e644106593f3f4aa98f8a84b23db5fa378900bd" platform="linux/amd64" I0426 18:14:49.973750 13 main.go:104] "SSL fake certificate created" file="/etc/ingress-controller/ssl/default-fake-certificate.pem" W0426 18:14:49.977891 13 main.go:125] Unable to get NODE information: nodes "ingress-nginx-dev-worker2" is forbidden: User "system:serviceaccount:e2e-tests-type-externalname-1682532884933614881-brsxh:nginx-ingress" cannot get resource "nodes" in API group "" at the cluster scope W0426 18:14:49.982107 13 nginx.go:154] Update of Ingress status is disabled (flag --update-status) I0426 18:14:49.983194 13 nginx.go:261] "Starting NGINX Ingress controller" I0426 18:14:49.984460 13 event.go:285] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"e2e-tests-type-externalname-1682532884933614881-brsxh", Name:"tcp-services", UID:"68eacc37-5686-486d-9e18-ddf586ce5c5f", APIVersion:"v1", ResourceVersion:"648", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap e2e-tests-type-externalname-1682532884933614881-brsxh/tcp-services I0426 18:14:49.984483 13 event.go:285] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"e2e-tests-type-externalname-1682532884933614881-brsxh", Name:"nginx-ingress-controller", UID:"68f0a2c4-e66b-4173-a2d7-8614d622cbc0", APIVersion:"v1", ResourceVersion:"670", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap e2e-tests-type-externalname-1682532884933614881-brsxh/nginx-ingress-controller I0426 18:14:51.184167 13 nginx.go:304] "Starting NGINX process" I0426 18:14:51.184274 13 leaderelection.go:248] attempting to acquire leader lease e2e-tests-type-externalname-1682532884933614881-brsxh/ingress-controller-leader... I0426 18:14:51.184421 13 controller.go:190] "Configuration changes detected, backend reload required" I0426 18:14:51.192935 13 leaderelection.go:258] successfully acquired lease e2e-tests-type-externalname-1682532884933614881-brsxh/ingress-controller-leader I0426 18:14:51.192986 13 status.go:84] "New leader elected" identity="nginx-ingress-controller-5696d6dd6d-96v72" I0426 18:14:51.216927 13 controller.go:207] "Backend successfully reloaded" I0426 18:14:51.216966 13 controller.go:218] "Initial sync, sleeping for 1 second" I0426 18:14:51.216987 13 event.go:285] Event(v1.ObjectReference{Kind:"Pod", Namespace:"e2e-tests-type-externalname-1682532884933614881-brsxh", Name:"nginx-ingress-controller-5696d6dd6d-96v72", UID:"8875ba08-1756-4e60-a144-9d299c223157", APIVersion:"v1", ResourceVersion:"812", FieldPath:""}): type: 'Normal' reason: 'RELOAD' NGINX reload triggered due to a change in configuration I0426 18:14:54.242451 13 store.go:433] "Found valid IngressClass" ingress="e2e-tests-type-externalname-1682532884933614881-brsxh/echo" ingressclass="ic-e2e-tests-type-externalname-1682532884933614881-brsxh" I0426 18:14:54.242752 13 event.go:285] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"e2e-tests-type-externalname-1682532884933614881-brsxh", Name:"echo", UID:"8edfeaec-a519-4ba5-b5ec-fc2195807e2c", APIVersion:"networking.k8s.io/v1", ResourceVersion:"969", FieldPath:""}): type: 'Normal' reason: 'Sync' Scheduled for sync I0426 18:14:54.990746 13 controller.go:190] "Configuration changes detected, backend reload required" I0426 18:14:55.026728 13 controller.go:207] "Backend successfully reloaded" I0426 18:14:55.026832 13 event.go:285] Event(v1.ObjectReference{Kind:"Pod", Namespace:"e2e-tests-type-externalname-1682532884933614881-brsxh", Name:"nginx-ingress-controller-5696d6dd6d-96v72", UID:"8875ba08-1756-4e60-a144-9d299c223157", APIVersion:"v1", ResourceVersion:"812", FieldPath:""}): type: 'Normal' reason: 'RELOAD' NGINX reload triggered due to a change in configuration 10.244.1.2 - - [26/Apr/2023:18:15:14 +0000] "GET /get HTTP/1.1" 504 132 "-" "Go-http-client/1.1" 88 10.085 [e2e-tests-type-externalname-1682532884933614881-brsxh-httpbin-80] [] 3.230.204.70:80 132 10.085 504 240f27eda5ca9f5a1f1ca8005cfecd5b STEP: Dumping namespace content - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:190 @ 04/26/23 18:15:17.527 Apr 26 18:15:17.527: INFO: NAME READY STATUS RESTARTS AGE pod/nginx-ingress-controller-5696d6dd6d-96v72 1/1 Running 0 29s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/httpbin ExternalName <none> httpbin.org 80/TCP 23s service/nginx-ingress-controller NodePort 10.96.187.199 <none> 80:30404/TCP,443:31881/TCP 29s NAME ENDPOINTS AGE endpoints/nginx-ingress-controller 10.244.1.4:443,10.244.1.4:80 29s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx-ingress-controller 1/1 1 1 29s < Exit [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:18.142 (3.726s) Attempt #1 Failed. Retrying ↺ @ 04/26/23 18:15:18.142 > Enter [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:15:18.142 < Exit [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:15:25.53 (7.388s) > Enter [It] should return 200 for service type=ExternalName with a port defined - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:129 @ 04/26/23 18:15:25.53 < Exit [It] should return 200 for service type=ExternalName with a port defined - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:129 @ 04/26/23 18:15:39.705 (14.175s) > Enter [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:39.705 < Exit [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:40.247 (542ms) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > Enter [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:44.928 < Exit [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:54.258 (9.33s) > Enter [It] should return 200 for service type=ExternalName using a port name - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:184 @ 04/26/23 18:14:54.258 < Exit [It] should return 200 for service type=ExternalName using a port name - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:184 @ 04/26/23 18:15:06.399 (12.141s) > Enter [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:06.399 < Exit [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:07.253 (854ms) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > Enter [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:44.929 < Exit [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:53.994 (9.065s) > Enter [It] should return status 502 for service type=ExternalName with an invalid host - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:153 @ 04/26/23 18:14:53.994 < Exit [It] should return status 502 for service type=ExternalName with an invalid host - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:153 @ 04/26/23 18:15:09.106 (15.111s) > Enter [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:09.106 < Exit [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:09.832 (726ms) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > Enter [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:44.927 < Exit [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:54.141 (9.214s) > Enter [It] should update the type=ExternalName after a service update - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:248 @ 04/26/23 18:14:54.141 STEP: checking the service is updated to use eu.httpbin.org - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:304 @ 04/26/23 18:15:14.27 < Exit [It] should update the type=ExternalName after a service update - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:248 @ 04/26/23 18:15:14.333 (20.191s) > Enter [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:14.333 < Exit [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:15.302 (969ms) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > Enter [BeforeEach] [TCP] tcp-services - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:44.932 < Exit [BeforeEach] [TCP] tcp-services - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:54.075 (9.143s) > Enter [BeforeEach] [TCP] tcp-services - /go/src/k8s.io/ingress-nginx/test/e2e/tcpudp/tcp.go:42 @ 04/26/23 18:14:54.075 < Exit [BeforeEach] [TCP] tcp-services - /go/src/k8s.io/ingress-nginx/test/e2e/tcpudp/tcp.go:42 @ 04/26/23 18:14:54.076 (1ms) > Enter [It] should expose an ExternalName TCP service - /go/src/k8s.io/ingress-nginx/test/e2e/tcpudp/tcp.go:80 @ 04/26/23 18:14:54.076 < Exit [It] should expose an ExternalName TCP service - /go/src/k8s.io/ingress-nginx/test/e2e/tcpudp/tcp.go:80 @ 04/26/23 18:14:57.318 (3.242s) > Enter [AfterEach] [TCP] tcp-services - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:14:57.318 < Exit [AfterEach] [TCP] tcp-services - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:14:57.986 (668ms) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > Enter [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:57.989 < Exit [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:15:05.27 (7.281s) > Enter [It] should return 200 for service type=ExternalName without a port defined - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:95 @ 04/26/23 18:15:05.27 < Exit [It] should return 200 for service type=ExternalName without a port defined - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:95 @ 04/26/23 18:15:15.873 (10.603s) > Enter [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:15.873 < Exit [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:16.773 (900ms) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > Enter [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:44.932 < Exit [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:55.241 (10.309s) > Enter [It] should sync ingress on type=ExternalName service addition/deletion - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:311 @ 04/26/23 18:14:55.241 < Exit [It] should sync ingress on type=ExternalName service addition/deletion - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:311 @ 04/26/23 18:15:15.906 (20.665s) > Enter [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:15.906 < Exit [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:16.802 (896ms) + + + > Enter [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:44.928 < Exit [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:14:53.104 (8.176s) > Enter [It] should return 200 for service type=ExternalName using FQDN with trailing dot - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:217 @ 04/26/23 18:14:53.104 < Exit [It] should return 200 for service type=ExternalName using FQDN with trailing dot - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:217 @ 04/26/23 18:15:03.883 (10.78s) > Enter [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:03.883 < Exit [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:04.462 (579ms) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > Enter [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:15:04.465 < Exit [BeforeEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:83 @ 04/26/23 18:15:12.968 (8.503s) > Enter [It] works with type=ExternalName set to incomplete fqdn - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:62 @ 04/26/23 18:15:12.968 < Exit [It] works with type=ExternalName set to incomplete fqdn - /go/src/k8s.io/ingress-nginx/test/e2e/servicebackend/service_externalname.go:62 @ 04/26/23 18:15:33.125 (20.157s) > Enter [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:33.125 < Exit [AfterEach] [Service] type=ExternalName - /go/src/k8s.io/ingress-nginx/test/e2e/framework/framework.go:84 @ 04/26/23 18:15:33.67 (545ms) + + + \ No newline at end of file