@@ -19,10 +19,12 @@ import (
19
19
"time"
20
20
21
21
v1 "k8s.io/api/core/v1"
22
+ netv1 "k8s.io/api/networking/v1"
22
23
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
23
24
"k8s.io/apimachinery/pkg/util/intstr"
24
25
"k8s.io/client-go/kubernetes"
25
26
"k8s.io/kubernetes/test/e2e/framework"
27
+ "k8s.io/kubernetes/test/e2e/framework/ingress"
26
28
e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
27
29
e2eservice "k8s.io/kubernetes/test/e2e/framework/service"
28
30
admissionapi "k8s.io/pod-security-admission/api"
@@ -40,16 +42,18 @@ var _ = describe("External DNS creation", func() {
40
42
f := framework .NewDefaultFramework ("external-dns" )
41
43
f .NamespacePodSecurityEnforceLevel = admissionapi .LevelBaseline
42
44
var (
43
- cs kubernetes.Interface
44
- jig * e2eservice.TestJig
45
+ cs kubernetes.Interface
46
+ jigs * e2eservice.TestJig
47
+ jigi * ingress.TestJig
45
48
)
46
49
47
50
BeforeEach (func () {
48
51
cs = f .ClientSet
49
- jig = e2eservice .NewTestJig (cs , f .Namespace .Name , serviceName )
52
+ jigs = e2eservice .NewTestJig (cs , f .Namespace .Name , serviceName )
53
+ jigi = ingress .NewIngressTestJig (f .ClientSet )
50
54
})
51
55
52
- f .It ("Should create DNS entry [Zalando]" , f .WithSlow (), func (ctx context.Context ) {
56
+ f .It ("Should create DNS entry via Service [Zalando]" , f .WithSlow (), func (ctx context.Context ) {
53
57
nameprefix := serviceName + "-"
54
58
ns := f .Namespace .Name
55
59
labels := map [string ]string {
@@ -65,7 +69,7 @@ var _ = describe("External DNS creation", func() {
65
69
}()
66
70
67
71
hostName := fmt .Sprintf ("%s-%d.%s" , serviceName , time .Now ().UTC ().Unix (), E2EHostedZone ())
68
- _ , err := jig .CreateLoadBalancerService (ctx , timeout , func (svc * v1.Service ) {
72
+ _ , err := jigs .CreateLoadBalancerService (ctx , timeout , func (svc * v1.Service ) {
69
73
svc .ObjectMeta = metav1.ObjectMeta {
70
74
Name : serviceName ,
71
75
Annotations : map [string ]string {
@@ -104,4 +108,56 @@ var _ = describe("External DNS creation", func() {
104
108
err = waitForSuccessfulResponse (hostName , timeout )
105
109
framework .ExpectNoError (err , "failed to wait for %s to be reachable" , hostName )
106
110
})
111
+
112
+ f .It ("Should create DNS entry via Ingress [Zalando]" , f .WithSlow (), func (ctx context.Context ) {
113
+ nameprefix := serviceName + "-"
114
+ ns := f .Namespace .Name
115
+ labels := map [string ]string {
116
+ "foo" : "bar" ,
117
+ "baz" : "blah" ,
118
+ }
119
+ port := 80
120
+
121
+ By ("Creating service " + serviceName + " in namespace " + ns )
122
+ service := createServiceTypeClusterIP (serviceName , labels , port , port )
123
+ defer func () {
124
+ err := cs .CoreV1 ().Services (ns ).Delete (ctx , serviceName , metav1.DeleteOptions {})
125
+ framework .ExpectNoError (err , "failed to delete service: %s in namespace: %s" , serviceName , ns )
126
+ }()
127
+ _ , err := cs .CoreV1 ().Services (ns ).Create (ctx , service , metav1.CreateOptions {})
128
+ framework .ExpectNoError (err )
129
+
130
+ hostName := fmt .Sprintf ("%s-%d.%s" , serviceName , time .Now ().UTC ().Unix (), E2EHostedZone ())
131
+
132
+ By ("Creating an ingress with name " + serviceName + " in namespace " + ns + " with hostname " + hostName )
133
+ ing := createIngress (serviceName , hostName , ns , "/" , netv1 .PathTypeImplementationSpecific , labels , nil , port )
134
+ defer func () {
135
+ err := cs .NetworkingV1 ().Ingresses (ns ).Delete (ctx , ing .Name , metav1.DeleteOptions {})
136
+ framework .ExpectNoError (err , "failed to delete ingress: %s in namespace: %s" , serviceName , ns )
137
+ }()
138
+ ingressCreate , err := cs .NetworkingV1 ().Ingresses (ns ).Create (ctx , ing , metav1.CreateOptions {})
139
+ framework .ExpectNoError (err )
140
+
141
+ _ , err = jigi .WaitForIngressAddress (ctx , cs , ns , ingressCreate .Name , 10 * time .Minute )
142
+ framework .ExpectNoError (err )
143
+
144
+ By ("Submitting the pod to kubernetes" )
145
+ route := fmt .Sprintf (`* -> inlineContent("%s") -> <shunt>` , "OK" )
146
+ pod := createSkipperPod (nameprefix , ns , route , labels , port )
147
+ defer func () {
148
+ err := cs .CoreV1 ().Pods (ns ).Delete (ctx , pod .Name , metav1.DeleteOptions {})
149
+ framework .ExpectNoError (err , "failed to delete pod: %s in namespace: %s" , pod .Name , ns )
150
+ }()
151
+
152
+ _ , err = cs .CoreV1 ().Pods (ns ).Create (ctx , pod , metav1.CreateOptions {})
153
+ framework .ExpectNoError (err , "failed to create pod: %s in namespace: %s" , pod .Name , ns )
154
+
155
+ framework .ExpectNoError (e2epod .WaitForPodNameRunningInNamespace (ctx , f .ClientSet , pod .Name , pod .Namespace ),
156
+ "failed to wait for pod: %s in namespace: %s" , pod .Name , ns )
157
+
158
+ // wait for DNS and for pod to be reachable.
159
+ By ("Waiting up to " + timeout .String () + " for " + hostName + " to be reachable" )
160
+ err = waitForSuccessfulResponse (hostName , timeout )
161
+ framework .ExpectNoError (err , "failed to wait for %s to be reachable" , hostName )
162
+ })
107
163
})
0 commit comments