Tenho um infisical standalone em execução no meu cluster do Kubernetes e gostaria de usar o External Secrets Operator para sincronizar os segredos do infisical com os segredos do Kubernetes.
Vou mostrar muitas chaves e URLs, mas embora eu as esteja usando, elas são para fins de teste e serão substituídas assim que eu conseguir resolver o problema. Para facilitar a visualização do que é o quê (e detectar quaisquer erros, se houver), vou colocá-las aqui:
- ID do cliente: 971d8c5d-08bf-4e14-810b-901b0618b4ed
- clienteSecret: b4909f4856392612a666c0e06bb9c3c16164ff85f290f79b8e6bb692e6f95c13
- URL infisical: http://infisical-infisical-standalone-infisical.infisical.svc.cluster.local:8080
- id do projeto infisical (o projeto stb): 01630159-214a-49b8-97a2-e566b23fe3ac
O infisical está sendo executado em seu próprio namespace (infisical) e tem um projeto chamado stb com um segredo chamado TEST em todos os três ambientes padrão (Desenvolvimento, Preparação e Produção).
Do namespace stb, consigo usar um pod curl temporário para obter os segredos do infisical usando as credenciais que dei a ele. Então, tenho a confirmação de que a identidade da máquina, a url e a autenticação funcionam como visto aqui (usando a seguinte documentação https://infisical.com/docs/api-reference/endpoints/universal-auth/login ):
kubectl run curl-pod --rm -i --tty --image=curlimages/curl --namespace stb -- /bin/sh
curl --request POST --url http://infisical-infisical-standalone-infisical.infisical.svc.cluster.local:8080/api/v1/auth/universal-auth/login --header 'Content-Type: application/json' --data '{"clientId": "971d8c5d-08bf-4e14-810b-901b0618b4ed", "clientSecret": "b4909f4856392612a666c0e06bb9c3c16164ff85f290f79b8e6bb692e6f95c13"}'
Isso tem a seguinte saída (então access + auth funcionam):
{
"accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eUlkIjoiMTY2YTg3OWYtNmY4YS00YzZmLWExNGItZDJiMzNhMGU0YTg5IiwiY2xpZW50U2VjcmV0SWQiOiIxZTNlODc4NS1kNTc2LTQzZjctOTJmOS1mOWZlODAyNzdkOWQiLCJpZGVudGl0eUFjY2Vzc1Rva2VuSWQiOiIxODUxNzJjZi1kMmM3LTRhYzMtOGI5OS1jNjVmNjRmZTNiZTciLCJhdXRoVG9rZW5UeXBlIjoiaWRlbnRpdHlBY2Nlc3NUb2tlbiIsImlhdCI6MTcyMzkxNjkxMSwiZXhwIjoxNzI2NTA4OTExfQ.Sdc0xlsvB8DIbOaJ__M3jGMlVBKPtPsU4cqwoL-a12I",
"expiresIn":2592000,
"accessTokenMaxTTL":2592000,
"tokenType":"Bearer"
}
Usando o token, agora posso obter os segredos https://infisical.com/docs/api-reference/endpoints/secrets/list (o ID do espaço de trabalho e o ambiente desejado são consultados na URL):
curl --request GET --url "http://infisical-infisical-standalone-infisical.infisical.svc.cluster.local:8080/api/v3/secrets/raw?workspaceId=01630159-214a-49b8-97a2-e566b23fe3ac&environment=dev" --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eUlkIjoiMTY2YTg3OWYtNmY4YS00YzZmLWExNGItZDJiMzNhMGU0YTg5IiwiY2xpZW50U2VjcmV0SWQi
OiIxZTNlODc4NS1kNTc2LTQzZjctOTJmOS1mOWZlODAyNzdkOWQiLCJpZGVudGl0eUFjY2Vzc1Rva2VuSWQiOiIxODUxNzJjZi1kMmM3LTRhYzMtOGI5OS1jNjVmNjRmZTNiZTciLCJhdXRoVG9rZW5UeXBlIjoiaWRlbnRpdHlBY2Nlc3NUb2tlbiIsImlhdCI6MTcyMzkxNjkxMSwiZXhwIjoxNzI2NTA4OTExfQ.Sdc0xlsvB8DIbOaJ__M3jGMlVBKPtPsU4cqwoL-a12I'
Por sua vez, recebo a lista secreta:
{
"secrets":[
{
"id":"94bf8823-227c-45e8-a8a9-bbe613069020",
"_id":"94bf8823-227c-45e8-a8a9-bbe613069020","workspace":"01630159-214a-49b8-97a2-e566b23fe3ac",
"environment":"dev",
"version":2,
"type":"shared",
"secretKey":"TEST",
"secretValue":"this is a test that I whant to see the value of dev",
"secretComment":""
}
],
"imports":[]
}
Estou mostrando tudo isso para mostrar que o infisical foi configurado da forma que eu acho que está correto, pois posso acessá-lo, consultá-lo e obter o segredo. Estou batalhando com o External Secrets Operator.
Aqui está a configuração que está sendo usada (seguindo a documentação https://external-secrets.io/latest/provider/infisical/ ):
apiVersion: v1
kind: Secret
metadata:
name: universal-auth-credentials
namespace: stb
type: Opaque
stringData:
clientId: "971d8c5d-08bf-4e14-810b-901b0618b4ed"
clientSecret: "b4909f4856392612a666c0e06bb9c3c16164ff85f290f79b8e6bb692e6f95c13"
---
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: infisical-managed-secrets
namespace: stb
spec:
secretStoreRef:
kind: SecretStore
name: infisical
target:
name: infisical-managed-secrets
data:
- secretKey: TEST
remoteRef:
key: TEST
---
apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
name: infisical
namespace: stb
spec:
provider:
infisical:
auth:
universalAuthCredentials:
clientId:
key: clientId
namespace: stb
name: universal-auth-credentials
clientSecret:
key: clientSecret
namespace: stb
name: universal-auth-credentials
secretsScope:
projectSlug: "01630159-214a-49b8-97a2-e566b23fe3ac"
environmentSlug: dev
secretsPath: /
hostAPI: http://infisical-infisical-standalone-infisical.infisical.svc.cluster.local:8080
O problema, no entanto, parece ser que há um valor ausente ou um valor que não é fornecido como pretendido. Os logs do pod de segredos externos mostram o seguinte (há dois logs diferentes que se repetem muito):
"ID do ambiente ou do espaço de trabalho ausente"
{
"level":"error",
"ts":1723917674.332734,
"logger":"controllers.ExternalSecret",
"msg":"could not get secret data from provider",
"ExternalSecret":
{
"name":"infisical-managed-secrets",
"namespace":"stb"
},
"error":"error retrieving secret at .data[0], key: TEST, err: Missing workspace id or environment",
"stacktrace":"github.com/external-secrets/external-secrets/pkg/controllers/externalsecret.(*Reconciler).markAsFailed\n\t/home/runner/work/external-secrets/external-secrets/pkg/controllers/externalsecret/externalsecret_controller.go:357\ngithub.com/external-secrets/external-secrets/pkg/controllers/externalsecret.(*Reconciler).Reconcile\n\t/home/runner/work/external-secrets/external-secrets/pkg/controllers/externalsecret/externalsecret_controller.go:226\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile\n\t/home/runner/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:114\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler\n\t/home/runner/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:311\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/home/runner/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:261\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/home/runner/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:222"
}
{
"level":"error",
"ts":1723917674.33634,
"msg":"Reconciler error",
"controller":"externalsecret",
"controllerGroup":"external-secrets.io",
"controllerKind":"ExternalSecret",
"ExternalSecret":
{
"name":"infisical-managed-secrets",
"namespace":"stb"
},
"namespace":"stb",
"name":"infisical-managed-secrets",
"reconcileID":"dac2f36a-5128-416f-929b-dd7ca11511d5",
"error":"error retrieving secret at .data[0], key: TEST, err: Missing workspace id or environment",
"stacktrace":"sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler\n\t/home/runner/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:324\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/home/runner/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:261\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/home/runner/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:222"
}
Estou perdido, a documentação não mostra nada que me permita resolver o problema e estou confuso se encontrei um bug, um problema com a documentação ou se simplesmente esqueci algo.
projectSlug: "01630159-214a-49b8-97a2-e566b23fe3ac" isso parece o ID do projeto, você deve fornecer o slug do projeto
Acontece que o infisical tinha um bug de algum tipo e que estava escondendo o botão slug, o que por sua vez causou todo o incômodo. As coisas parecem funcionar como pretendido até agora.
https://github.com/external-secrets/external-secrets/issues/3808