Skip to content

Commit f2de3e2

Browse files
committed
[ingest/edgefunction] Fix .dockerconfigjson parsing
1 parent 8293668 commit f2de3e2

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,7 @@ require (
374374
k8s.io/apiextensions-apiserver v0.30.1 // indirect
375375
k8s.io/component-base v0.30.1 // indirect
376376
k8s.io/kms v0.30.1 // indirect
377+
k8s.io/kubernetes v1.30.1 // indirect
377378
lukechampine.com/uint128 v1.3.0 // indirect
378379
modernc.org/cc/v3 v3.41.0 // indirect
379380
modernc.org/ccgo/v3 v3.17.0 // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2805,6 +2805,8 @@ k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C
28052805
k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
28062806
k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108 h1:Q8Z7VlGhcJgBHJHYugJ/K/7iB8a2eSxCyxdVjJp+lLY=
28072807
k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98=
2808+
k8s.io/kubernetes v1.30.1 h1:XlqS6KslLEA5mQzLK2AJrhr4Z1m8oJfkhHiWJ5lue+I=
2809+
k8s.io/kubernetes v1.30.1/go.mod h1:yPbIk3MhmhGigX62FLJm+CphNtjxqCvAIFQXup6RKS0=
28082810
k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
28092811
k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
28102812
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A=

pkg/apiserver/ingest/edgefunction.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"k8s.io/client-go/kubernetes"
2828
"k8s.io/client-go/rest"
2929
"k8s.io/client-go/util/retry"
30+
"k8s.io/kubernetes/pkg/credentialprovider"
3031
"oras.land/oras-go/v2"
3132
"oras.land/oras-go/v2/content"
3233
"oras.land/oras-go/v2/content/file"
@@ -420,6 +421,8 @@ func (w *worker) pullOCIImage(
420421
return nil, errors.New("k8s environment is not set")
421422
}
422423

424+
log.Info("Getting OCI credentials from secret", "SecretNamespace", secretRef.Namespace, "SecretName", secretRef.Name)
425+
423426
secret, err := w.k8s.CoreV1().Secrets(string(secretRef.Namespace)).Get(ctx, string(secretRef.Name), metav1.GetOptions{})
424427
if err != nil {
425428
return nil, fmt.Errorf("failed to get secret: %w", err)
@@ -428,15 +431,25 @@ func (w *worker) pullOCIImage(
428431
return nil, fmt.Errorf("invalid secret type %q, expected %q", secret.Type, "kubernetes.io/dockerconfigjson")
429432
}
430433
encodedToken := secret.Data[".dockerconfigjson"]
431-
var dockerConfig struct {
432-
Auths map[string]auth.Credential `json:"auths"`
434+
if len(encodedToken) == 0 {
435+
return nil, fmt.Errorf("no .dockerconfigjson data found in secret")
433436
}
437+
var dockerConfig credentialprovider.DockerConfigJSON
434438
if err := json.Unmarshal(encodedToken, &dockerConfig); err != nil {
435439
return nil, fmt.Errorf("failed to parse dockerconfigjson: %w", err)
436440
}
437441

438442
credsFunc = func(_ context.Context, _ string) (auth.Credential, error) {
439-
return dockerConfig.Auths[repo.Reference.Registry], nil
443+
authKey := filepath.Join(repo.Reference.Registry, repo.Reference.Repository)
444+
r, ok := dockerConfig.Auths[authKey]
445+
if !ok {
446+
return auth.EmptyCredential, fmt.Errorf("no credentials found for registry %s", authKey)
447+
}
448+
log.Info("Found credentials for registry", "registry", authKey, "username", r.Username)
449+
return auth.Credential{
450+
Username: r.Username,
451+
Password: r.Password,
452+
}, nil
440453
}
441454
} else {
442455
// TODO(dilyevsky): Support other kinds of secrets for non-k8s environments.

0 commit comments

Comments
 (0)