Skip to content

Commit 6bac615

Browse files
initial work on ambient mc integ tests (#57644)
* initial work on ambient mc integ tests * lint * skip mc for uncaptured * add cleanup to globals * unlabel at cleanup * sanity check * fix unlabel * fmt * add registry changes * fmt? * fix mc registry server * clarify test name * add remote secrets * lint * improve mc checks * attempt to unbreak other tests * don't label sidecar services * skip sidecar tests for mc ambient * improve or skip tests from ingress * re-add commented out tests * skip cni tests for mc * skip more sidecar tests * skip more sidecars, and always use global labels * skip more sidecars * check for race condition. * label waypoints as global, skip known failures. * skip known failures * lint * skip authn flakey tests * remove skip of PeerAuthn in favor of targeted sleep. * don't skip serversidelb, as fixed on master and 128. * apply review comments * remove debugging code * add accidentally commented test * skip traffic split, expected behavior
1 parent 9ad1351 commit 6bac615

File tree

18 files changed

+668
-468
lines changed

18 files changed

+668
-468
lines changed

common/scripts/kind_provisioner.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ function setup_kind_cluster() {
196196
if [[ -n "${DEVCONTAINER:-}" ]]; then
197197
# identify our docker container id using proc and regex
198198
containerid=$(grep 'resolv.conf' /proc/self/mountinfo | sed 's/.*\/docker\/containers\/\([0-9a-f]*\).*/\1/')
199-
docker network connect kind "$containerid"
199+
docker network connect kind "$containerid" 2>/dev/null || true
200200
kind export kubeconfig --name="${NAME}" --internal
201201
fi
202202

pkg/test/framework/components/ambient/waypoint.go

Lines changed: 60 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,11 @@ var _ io.Closer = &kubeComponent{}
4343
type kubeComponent struct {
4444
id resource.ID
4545

46-
ns namespace.Instance
47-
inbound istioKube.PortForwarder
48-
outbound istioKube.PortForwarder
49-
pod v1.Pod
46+
ns namespace.Instance
47+
inbound istioKube.PortForwarder
48+
outbound istioKube.PortForwarder
49+
pod v1.Pod
50+
clusterName string
5051
}
5152

5253
func (k kubeComponent) Namespace() namespace.Instance {
@@ -79,17 +80,36 @@ func (k kubeComponent) Close() error {
7980
return nil
8081
}
8182

83+
func (k kubeComponent) ClusterName() string {
84+
return k.clusterName
85+
}
86+
8287
// WaypointProxy describes a waypoint proxy deployment
8388
type WaypointProxy interface {
8489
Namespace() namespace.Instance
8590
Inbound() string
8691
Outbound() string
8792
PodIP() string
93+
ClusterName() string
94+
}
95+
96+
type Waypoints []WaypointProxy
97+
98+
// ForCluster returns a list of instances that match the cluster name
99+
func (i Waypoints) ForCluster(name string) Waypoints {
100+
out := make(Waypoints, 0, len(i))
101+
for _, c := range i {
102+
if c.ClusterName() == name {
103+
out = append(out, c)
104+
}
105+
}
106+
return out
88107
}
89108

90109
func NewWaypointProxyForCluster(ctx resource.Context, ns namespace.Instance, name string, cls cluster.Cluster) (WaypointProxy, error) {
91110
server := &kubeComponent{
92-
ns: ns,
111+
ns: ns,
112+
clusterName: cls.Name(),
93113
}
94114
server.id = ctx.TrackResource(server)
95115
if err := crd.DeployGatewayAPI(ctx); err != nil {
@@ -147,11 +167,8 @@ func NewWaypointProxyForCluster(ctx resource.Context, ns namespace.Instance, nam
147167
}
148168

149169
// NewWaypointProxy creates a new WaypointProxy.
150-
func NewWaypointProxy(ctx resource.Context, ns namespace.Instance, name string) (WaypointProxy, error) {
151-
server := &kubeComponent{
152-
ns: ns,
153-
}
154-
server.id = ctx.TrackResource(server)
170+
func NewWaypointProxy(ctx resource.Context, ns namespace.Instance, name string) (Waypoints, error) {
171+
var servers Waypoints
155172
if err := crd.DeployGatewayAPI(ctx); err != nil {
156173
return nil, err
157174
}
@@ -181,34 +198,41 @@ func NewWaypointProxy(ctx resource.Context, ns namespace.Instance, name string)
181198
}
182199
}
183200

184-
cls := ctx.Clusters().Default()
185-
// Find the Waypoint pod and service, and start forwarding a local port.
186-
fetchFn := testKube.NewSinglePodFetch(cls, ns.Name(), fmt.Sprintf("%s=%s", label.IoK8sNetworkingGatewayGatewayName.Name, name))
187-
pods, err := testKube.WaitUntilPodsAreReady(fetchFn)
188-
if err != nil {
189-
return nil, err
190-
}
191-
pod := pods[0]
192-
inbound, err := cls.NewPortForwarder(pod.Name, pod.Namespace, "", 0, 15008)
193-
if err != nil {
194-
return nil, err
195-
}
201+
for _, cls := range ctx.AllClusters() {
202+
server := &kubeComponent{
203+
ns: ns,
204+
clusterName: cls.Name(),
205+
}
206+
server.id = ctx.TrackResource(server)
207+
// Find the Waypoint pod and service, and start forwarding a local port.
208+
fetchFn := testKube.NewSinglePodFetch(cls, ns.Name(), fmt.Sprintf("%s=%s", label.IoK8sNetworkingGatewayGatewayName.Name, name))
209+
pods, err := testKube.WaitUntilPodsAreReady(fetchFn)
210+
if err != nil {
211+
return nil, err
212+
}
213+
pod := pods[0]
214+
inbound, err := cls.NewPortForwarder(pod.Name, pod.Namespace, "", 0, 15008)
215+
if err != nil {
216+
return nil, err
217+
}
196218

197-
if err := inbound.Start(); err != nil {
198-
return nil, err
199-
}
200-
outbound, err := cls.NewPortForwarder(pod.Name, pod.Namespace, "", 0, 15001)
201-
if err != nil {
202-
return nil, err
203-
}
219+
if err := inbound.Start(); err != nil {
220+
return nil, err
221+
}
222+
outbound, err := cls.NewPortForwarder(pod.Name, pod.Namespace, "", 0, 15001)
223+
if err != nil {
224+
return nil, err
225+
}
204226

205-
if err := outbound.Start(); err != nil {
206-
return nil, err
227+
if err := outbound.Start(); err != nil {
228+
return nil, err
229+
}
230+
server.inbound = inbound
231+
server.outbound = outbound
232+
server.pod = pod
233+
servers = append(servers, server)
207234
}
208-
server.inbound = inbound
209-
server.outbound = outbound
210-
server.pod = pod
211-
return server, nil
235+
return servers, nil
212236
}
213237

214238
func NewWaypointProxyOrFailForCluster(t framework.TestContext, ns namespace.Instance, name string, cls cluster.Cluster) WaypointProxy {
@@ -221,7 +245,7 @@ func NewWaypointProxyOrFailForCluster(t framework.TestContext, ns namespace.Inst
221245
}
222246

223247
// NewWaypointProxyOrFail calls NewWaypointProxy and fails if an error occurs.
224-
func NewWaypointProxyOrFail(t framework.TestContext, ns namespace.Instance, name string) WaypointProxy {
248+
func NewWaypointProxyOrFail(t framework.TestContext, ns namespace.Instance, name string) Waypoints {
225249
t.Helper()
226250
s, err := NewWaypointProxy(t, ns, name)
227251
if err != nil {

pkg/test/framework/components/echo/common/deployment/echos.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ func New(ctx resource.Context, cfg Config) (*Echos, error) {
479479

480480
if ctx.Settings().Ambient {
481481

482-
waypointProxies := make(map[string]ambient.WaypointProxy)
482+
waypointProxies := make(map[string]ambient.Waypoints)
483483

484484
for _, echo := range echos {
485485
svcwp := echo.Config().ServiceWaypointProxy

pkg/test/framework/components/echo/config.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,10 @@ func (c Config) HasProxyCapabilities() bool {
377377
return !c.IsUncaptured() || c.HasSidecar() || c.IsProxylessGRPC()
378378
}
379379

380+
func (c Config) IsAmbient() bool {
381+
return c.HasProxyCapabilities() && !c.HasSidecar()
382+
}
383+
380384
func (c Config) IsVM() bool {
381385
return c.DeployAsVM
382386
}

pkg/test/framework/components/echo/echotest/run.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,11 @@ func (t *T) RunViaIngress(testFn ingressTest) {
220220
doTest(ctx, ctx.Clusters()[0], dstInstances)
221221
} else {
222222
t.fromEachCluster(ctx, func(ctx framework.TestContext, c cluster.Cluster) {
223+
if ctx.Settings().AmbientMultiNetwork {
224+
// Ambient multi-network does not yet support routing across clusters from ingress
225+
// https://github.com/istio/istio/issues/57537
226+
dstInstances = dstInstances.ForCluster(c.Name())
227+
}
223228
doTest(ctx, c, dstInstances)
224229
})
225230
}

pkg/test/framework/components/istio/ca.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func CreateCertificateForCluster(t framework.TestContext, i Instance, serviceAcc
4646
return Cert{}, fmt.Errorf("failed to fetch root cert: %v", err)
4747
}
4848

49-
token, err := GetServiceAccountToken(c.Kube(), "istio-ca", namespace, serviceAccount)
49+
token, err := GetServiceAccountToken(c, "istio-ca", namespace, serviceAccount)
5050
if err != nil {
5151
return Cert{}, err
5252
}
@@ -96,12 +96,13 @@ func CreateCertificate(t framework.TestContext, i Instance, serviceAccount, name
9696
// 7 days
9797
var saTokenExpiration int64 = 60 * 60 * 24 * 7
9898

99-
func GetServiceAccountToken(c kubernetes.Interface, aud, ns, sa string) (string, error) {
99+
func GetServiceAccountToken(cluster cluster.Cluster, aud, ns, sa string) (string, error) {
100100
san := san(ns, sa)
101-
102-
if got, f := cachedTokens.Load(san); f {
101+
c := cluster.Kube()
102+
key := fmt.Sprintf("%s:%s", cluster.Name(), san)
103+
if got, f := cachedTokens.Load(key); f {
103104
t := got.(token)
104-
if t.expiration.After(time.Now().Add(time.Minute)) {
105+
if t.expiration.After(time.Now().Add(5 * time.Minute)) {
105106
return t.token, nil
106107
}
107108
// Otherwise, its expired, load a new one
@@ -117,7 +118,7 @@ func GetServiceAccountToken(c kubernetes.Interface, aud, ns, sa string) (string,
117118
return "", err
118119
}
119120
exp := rt.Status.ExpirationTimestamp.Time
120-
cachedTokens.Store(san, token{rt.Status.Token, exp})
121+
cachedTokens.Store(key, token{rt.Status.Token, exp})
121122
return rt.Status.Token, nil
122123
}
123124

pkg/test/framework/components/registryredirector/kube.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,9 @@ type kubeComponent struct {
5454
}
5555

5656
func newKube(ctx resource.Context, cfg Config) (Instance, error) {
57+
cluster := ctx.Clusters().GetOrDefault(cfg.Cluster)
5758
c := &kubeComponent{
58-
cluster: ctx.Clusters().GetOrDefault(cfg.Cluster),
59+
cluster: cluster,
5960
}
6061
c.id = ctx.TrackResource(c)
6162
var err error
@@ -96,7 +97,7 @@ func newKube(ctx resource.Context, cfg Config) (Instance, error) {
9697
return nil, fmt.Errorf("failed to apply rendered %s, err: %v", env.RegistryRedirectorServerInstallFilePath, err)
9798
}
9899

99-
fetchFn := testKube.NewPodFetch(ctx.Clusters().Default(), c.ns.Name(), podSelector)
100+
fetchFn := testKube.NewPodFetch(cluster, c.ns.Name(), podSelector)
100101
pods, err := testKube.WaitUntilPodsAreReady(fetchFn)
101102
if err != nil {
102103
return nil, err

0 commit comments

Comments
 (0)