fix(ci): udp forward failed and missing pigz (#1929)
diff --git a/.github/workflows/e2e-test-ci.yml b/.github/workflows/e2e-test-ci.yml
index 901ed82..a10a443 100644
--- a/.github/workflows/e2e-test-ci.yml
+++ b/.github/workflows/e2e-test-ci.yml
@@ -95,6 +95,8 @@
chmod +x ./kind
sudo mv kind /usr/local/bin
+ sudo apt install -y pigz
+
- name: Build images
env:
TAG: dev
@@ -183,6 +185,7 @@
- name: Load images from cache
run: |
echo "loading docker images..."
+ sudo apt install -y pigz
pigz -dc docker.tar.gz | docker load
make push-images
diff --git a/Dockerfile b/Dockerfile
index 4d6354f..ad034d7 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,3 @@
-#syntax=docker/dockerfile:1.2
-
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
diff --git a/test/e2e/scaffold/k8s.go b/test/e2e/scaffold/k8s.go
index 7467f62..46ee6bc 100644
--- a/test/e2e/scaffold/k8s.go
+++ b/test/e2e/scaffold/k8s.go
@@ -756,7 +756,7 @@
t,
statusMsg,
20,
- 5*time.Second,
+ 2*time.Second,
func() (string, error) {
endpoints, err := e.CoreV1().Endpoints(s.Namespace()).Get(context.Background(), endpointsName, metav1.GetOptions{})
if err != nil {
@@ -769,7 +769,7 @@
if readyNum == desired {
return "Service is now available", nil
}
- return fmt.Sprintf("Endpoints not ready yet, expect %v, actual %v", desired, readyNum), nil
+ return "failed", fmt.Errorf("endpoints not ready yet, expect %v, actual %v", desired, readyNum)
},
)
ginkgo.GinkgoT().Log(message)
@@ -781,3 +781,22 @@
assert.Nil(ginkgo.GinkgoT(), err, "get kubernetes client")
return client
}
+
+func (s *Scaffold) RunKubectlAndGetOutput(args ...string) (string, error) {
+ return k8s.RunKubectlAndGetOutputE(ginkgo.GinkgoT(), s.kubectlOptions, args...)
+}
+
+func (s *Scaffold) RunDigDNSClientFromK8s(args ...string) (string, error) {
+ kubectlArgs := []string{
+ "run",
+ "dig",
+ "-i",
+ "--rm",
+ "--restart=Never",
+ "--image-pull-policy=IfNotPresent",
+ "--image=toolbelt/dig",
+ "--",
+ }
+ kubectlArgs = append(kubectlArgs, args...)
+ return s.RunKubectlAndGetOutput(kubectlArgs...)
+}
diff --git a/test/e2e/scaffold/test_backend.go b/test/e2e/scaffold/test_backend.go
index 4888070..f4eb897 100644
--- a/test/e2e/scaffold/test_backend.go
+++ b/test/e2e/scaffold/test_backend.go
@@ -23,6 +23,10 @@
corev1 "k8s.io/api/core/v1"
)
+const (
+ CoreDNSDeployment = "coredns"
+)
+
var (
_testBackendDeploymentTemplate = `
apiVersion: apps/v1
@@ -120,11 +124,11 @@
targetPort: 50053
type: ClusterIP
`
- _udpDeployment = `
+ _udpDeployment = fmt.Sprintf(`
apiVersion: apps/v1
kind: Deployment
metadata:
- name: coredns
+ name: %s
spec:
replicas: 1
selector:
@@ -146,13 +150,13 @@
readinessProbe:
tcpSocket:
port: 53
- initialDelaySeconds: 5
+ initialDelaySeconds: 2
periodSeconds: 10
ports:
- name: dns
containerPort: 53
protocol: UDP
-`
+`, CoreDNSDeployment)
_udpService = `
kind: Service
apiVersion: v1
diff --git a/test/e2e/suite-gateway/gateway_udproute.go b/test/e2e/suite-gateway/gateway_udproute.go
index 31bd60f..e172e36 100644
--- a/test/e2e/suite-gateway/gateway_udproute.go
+++ b/test/e2e/suite-gateway/gateway_udproute.go
@@ -17,8 +17,8 @@
package gateway
import (
- "context"
"fmt"
+ "time"
"github.com/onsi/ginkgo/v2"
"github.com/stretchr/testify/assert"
@@ -48,9 +48,12 @@
assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixStreamRoutesCreated(1), "Checking number of streamroute")
assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixUpstreamsCreated(1), "Checking number of upstream")
// test dns query
- r := s.DNSResolver()
- host := "httpbin.org"
- _, err = r.LookupIPAddr(context.Background(), host)
- assert.Nil(ginkgo.GinkgoT(), err, "dns query error")
+ output, err := s.RunDigDNSClientFromK8s("@apisix-service-e2e-test", "-p", "9200", "github.com")
+ assert.Nil(ginkgo.GinkgoT(), err, "run dig error")
+ assert.Contains(ginkgo.GinkgoT(), output, "ADDITIONAL SECTION")
+
+ time.Sleep(3 * time.Second)
+ output = s.GetDeploymentLogs(scaffold.CoreDNSDeployment)
+ assert.Contains(ginkgo.GinkgoT(), output, "github.com. udp")
})
})
diff --git a/test/e2e/suite-ingress/suite-ingress-resource/stream.go b/test/e2e/suite-ingress/suite-ingress-resource/stream.go
index 9c5a09a..483362a 100644
--- a/test/e2e/suite-ingress/suite-ingress-resource/stream.go
+++ b/test/e2e/suite-ingress/suite-ingress-resource/stream.go
@@ -16,8 +16,8 @@
package ingress
import (
- "context"
"fmt"
+ "time"
ginkgo "github.com/onsi/ginkgo/v2"
"github.com/stretchr/testify/assert"
@@ -62,55 +62,7 @@
resp.Body().Contains("x-my-value")
})
ginkgo.It("stream udp proxy", func() {
- assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(`
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: coredns
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: coredns
- template:
- metadata:
- labels:
- app: coredns
- spec:
- containers:
- - name: coredns
- image: coredns/coredns:1.8.4
- livenessProbe:
- tcpSocket:
- port: 53
- initialDelaySeconds: 5
- periodSeconds: 10
- readinessProbe:
- tcpSocket:
- port: 53
- initialDelaySeconds: 5
- periodSeconds: 10
- ports:
- - name: dns
- containerPort: 53
- protocol: UDP
-`))
- assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(`
-kind: Service
-apiVersion: v1
-metadata:
- name: coredns
-spec:
- selector:
- app: coredns
- type: ClusterIP
- ports:
- - port: 53
- targetPort: 53
- protocol: UDP
-`))
-
- s.EnsureNumEndpointsReady(ginkgo.GinkgoT(), "coredns", 1)
+ dnsSvc := s.NewCoreDNSService()
apisixRoute := fmt.Sprintf(`
apiVersion: apisix.apache.org/v2
@@ -124,9 +76,9 @@
match:
ingressPort: 9200
backend:
- serviceName: coredns
- servicePort: 53
-`)
+ serviceName: %s
+ servicePort: %d
+`, dnsSvc.Name, dnsSvc.Spec.Ports[0].Port)
assert.Nil(ginkgo.GinkgoT(), s.CreateVersionedApisixResource(apisixRoute))
err := s.EnsureNumApisixStreamRoutesCreated(1)
@@ -137,10 +89,13 @@
assert.Len(ginkgo.GinkgoT(), sr, 1)
assert.Equal(ginkgo.GinkgoT(), sr[0].ServerPort, int32(9200))
// test dns query
- r := s.DNSResolver()
- host := "httpbin.org"
- _, err = r.LookupIPAddr(context.Background(), host)
- assert.Nil(ginkgo.GinkgoT(), err, "dns query error")
+ output, err := s.RunDigDNSClientFromK8s("@apisix-service-e2e-test", "-p", "9200", "github.com")
+ assert.Nil(ginkgo.GinkgoT(), err, "run dig error")
+ assert.Contains(ginkgo.GinkgoT(), output, "ADDITIONAL SECTION")
+
+ time.Sleep(3 * time.Second)
+ output = s.GetDeploymentLogs(scaffold.CoreDNSDeployment)
+ assert.Contains(ginkgo.GinkgoT(), output, "github.com. udp")
})
}
ginkgo.Describe("suite-ingress-resource: scaffold v2", func() {
diff --git a/test/e2e/testdata/apisix-gw-config-v3.yaml b/test/e2e/testdata/apisix-gw-config-v3.yaml
index 2b1894e..0997f8c 100644
--- a/test/e2e/testdata/apisix-gw-config-v3.yaml
+++ b/test/e2e/testdata/apisix-gw-config-v3.yaml
@@ -49,3 +49,8 @@
plugin_attr:
prometheus:
enable_export_server: false
+
+nginx_config:
+ worker_processes: 1
+ stream:
+ enable_access_log: true