|
|
|
|
@ -15,6 +15,7 @@ import (
|
|
|
|
|
corev1 "k8s.io/api/core/v1"
|
|
|
|
|
networkingv1 "k8s.io/api/networking/v1"
|
|
|
|
|
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
|
|
|
|
"k8s.io/apimachinery/pkg/api/resource"
|
|
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
|
|
|
"k8s.io/apimachinery/pkg/types"
|
|
|
|
|
"k8s.io/client-go/tools/record"
|
|
|
|
|
@ -70,7 +71,8 @@ func TestTailscaleIngress(t *testing.T) {
|
|
|
|
|
Web: map[ipn.HostPort]*ipn.WebServerConfig{
|
|
|
|
|
"${TS_CERT_DOMAIN}:443": {Handlers: map[string]*ipn.HTTPHandler{
|
|
|
|
|
"/": {Proxy: "http://1.2.3.4:8080/"},
|
|
|
|
|
}}},
|
|
|
|
|
}},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -164,7 +166,8 @@ func TestTailscaleIngressHostname(t *testing.T) {
|
|
|
|
|
Web: map[ipn.HostPort]*ipn.WebServerConfig{
|
|
|
|
|
"${TS_CERT_DOMAIN}:443": {Handlers: map[string]*ipn.HTTPHandler{
|
|
|
|
|
"/": {Proxy: "http://1.2.3.4:8080/"},
|
|
|
|
|
}}},
|
|
|
|
|
}},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -238,7 +241,17 @@ func TestTailscaleIngressWithProxyClass(t *testing.T) {
|
|
|
|
|
Spec: tsapi.ProxyClassSpec{StatefulSet: &tsapi.StatefulSet{
|
|
|
|
|
Labels: tsapi.Labels{"foo": "bar"},
|
|
|
|
|
Annotations: map[string]string{"bar.io/foo": "some-val"},
|
|
|
|
|
Pod: &tsapi.Pod{Annotations: map[string]string{"foo.io/bar": "some-val"}},
|
|
|
|
|
Pod: &tsapi.Pod{
|
|
|
|
|
Annotations: map[string]string{"foo.io/bar": "some-val"},
|
|
|
|
|
TailscaleContainer: &tsapi.Container{
|
|
|
|
|
Resources: corev1.ResourceRequirements{
|
|
|
|
|
Requests: corev1.ResourceList{
|
|
|
|
|
corev1.ResourceCPU: resource.MustParse("500m"),
|
|
|
|
|
corev1.ResourceMemory: resource.MustParse("28Mi"),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}},
|
|
|
|
|
}
|
|
|
|
|
fc := fake.NewClientBuilder().
|
|
|
|
|
@ -286,13 +299,14 @@ func TestTailscaleIngressWithProxyClass(t *testing.T) {
|
|
|
|
|
Web: map[ipn.HostPort]*ipn.WebServerConfig{
|
|
|
|
|
"${TS_CERT_DOMAIN}:443": {Handlers: map[string]*ipn.HTTPHandler{
|
|
|
|
|
"/": {Proxy: "http://1.2.3.4:8080/"},
|
|
|
|
|
}}},
|
|
|
|
|
}},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
expectEqual(t, fc, expectedSecret(t, fc, opts))
|
|
|
|
|
expectEqual(t, fc, expectedHeadlessService(shortName, "ingress"))
|
|
|
|
|
expectEqual(t, fc, expectedSTSUserspace(t, fc, opts), removeResourceReqs)
|
|
|
|
|
expectEqual(t, fc, expectedSTSUserspace(t, fc, opts))
|
|
|
|
|
|
|
|
|
|
// 2. Ingress is updated to specify a ProxyClass, ProxyClass is not yet
|
|
|
|
|
// ready, so proxy resource configuration does not change.
|
|
|
|
|
@ -300,7 +314,7 @@ func TestTailscaleIngressWithProxyClass(t *testing.T) {
|
|
|
|
|
mak.Set(&ing.ObjectMeta.Labels, LabelAnnotationProxyClass, "custom-metadata")
|
|
|
|
|
})
|
|
|
|
|
expectReconciled(t, ingR, "default", "test")
|
|
|
|
|
expectEqual(t, fc, expectedSTSUserspace(t, fc, opts), removeResourceReqs)
|
|
|
|
|
expectEqual(t, fc, expectedSTSUserspace(t, fc, opts))
|
|
|
|
|
|
|
|
|
|
// 3. ProxyClass is set to Ready by proxy-class reconciler. Ingress get
|
|
|
|
|
// reconciled and configuration from the ProxyClass is applied to the
|
|
|
|
|
@ -316,7 +330,7 @@ func TestTailscaleIngressWithProxyClass(t *testing.T) {
|
|
|
|
|
})
|
|
|
|
|
expectReconciled(t, ingR, "default", "test")
|
|
|
|
|
opts.proxyClass = pc.Name
|
|
|
|
|
expectEqual(t, fc, expectedSTSUserspace(t, fc, opts), removeResourceReqs)
|
|
|
|
|
expectEqual(t, fc, expectedSTSUserspace(t, fc, opts))
|
|
|
|
|
|
|
|
|
|
// 4. tailscale.com/proxy-class label is removed from the Ingress, the
|
|
|
|
|
// Ingress gets reconciled and the custom ProxyClass configuration is
|
|
|
|
|
@ -390,7 +404,8 @@ func TestTailscaleIngressWithServiceMonitor(t *testing.T) {
|
|
|
|
|
Web: map[ipn.HostPort]*ipn.WebServerConfig{
|
|
|
|
|
"${TS_CERT_DOMAIN}:443": {Handlers: map[string]*ipn.HTTPHandler{
|
|
|
|
|
"/": {Proxy: "http://1.2.3.4:8080/"},
|
|
|
|
|
}}},
|
|
|
|
|
}},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
resourceVersion: "1",
|
|
|
|
|
}
|
|
|
|
|
@ -731,7 +746,8 @@ func TestEmptyPath(t *testing.T) {
|
|
|
|
|
Web: map[ipn.HostPort]*ipn.WebServerConfig{
|
|
|
|
|
"${TS_CERT_DOMAIN}:443": {Handlers: map[string]*ipn.HTTPHandler{
|
|
|
|
|
"/": {Proxy: "http://1.2.3.4:8080/"},
|
|
|
|
|
}}},
|
|
|
|
|
}},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -764,9 +780,11 @@ func service() *corev1.Service {
|
|
|
|
|
},
|
|
|
|
|
Spec: corev1.ServiceSpec{
|
|
|
|
|
ClusterIP: "1.2.3.4",
|
|
|
|
|
Ports: []corev1.ServicePort{{
|
|
|
|
|
Port: 8080,
|
|
|
|
|
Name: "http"},
|
|
|
|
|
Ports: []corev1.ServicePort{
|
|
|
|
|
{
|
|
|
|
|
Port: 8080,
|
|
|
|
|
Name: "http",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|