gpt4 book ai didi

azure - Aks SecretProviderClass 未找到 secret

转载 作者:行者123 更新时间:2023-12-02 07:35:54 24 4
gpt4 key购买 nike

编辑:发现问题。我没有安装 secret 驱动程序的插件。一旦安装,我就能让它工作

我在这里面临一个问题,我不知道我还能尝试什么来解决这个问题。

我有一个 aks 与一个运行基本 Web 应用程序的 pod 一起运行 todo list 。没有什么太花哨或复杂的。我在这里尝试做的是授予 aks 集群访问 keyvault 的权限和 GET传递给 pod 的 secret 。 secret 只是一个ASPNETCORE_ENVIRONMENT: Development .

按照文档,我使用 helm 安装存储库:

helm repo add csi-secrets-store-provider-azure https://azure.github.io/secrets-store-csi-driver-provider-azure/charts
helm install csi csi-secrets-store-provider-azure/csi-secrets-store-provider-azure

我在azure中创建了一个服务原则: SERVICE_PRINCIPLE_CLIENT_SECRET = az ad sp create-for-rbac --skip-assignment --name sp-aks-keyvault

我查询了 clientId 和 Secret 并将它们传递到我的集群,如下所示:

kubectl create secret generic secrets-store-creds --from-literal clientid="ClientID" --from-literal clientsecret="Password"

一切设置完毕后。我设置了这些部署。

部署.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp-deployment
namespace: default
labels:
app: webapp
spec:
replicas: 1
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: dockerimage-acr
ports:
- containerPort: 80
env:
- name: ASPNETCORE_ENVIRONMENT
valueFrom:
secretKeyRef:
name: aspenet-environment
key: environment
securityContext:
allowPrivilegeEscalation: false
volumeMounts:
- name: secrets-mount
mountPath: "/mnt/secrets-store"
readOnly: true
restartPolicy: Always
volumes:
- name: secrets-mount
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: "kv-name"
nodePublishSecretRef: # Only required when using service principal mode
name: secrets-store-creds

还有我的secretProvider.yaml

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: keyvault-secret-class
namespace: default
spec:
provider: azure
secretObjects:
- secretName: aspenet-environment
type: Opaque
data:
- objectName: aspnetcoreenvironment
key: environment
parameters:
usePodIdentity: "false"
useVMManagedIdentity: "false"
userAssignedIdentityID: ""
keyvaultName: "mykeyvault-name"
objects: |
array:
- |
objectName: aspnetcoreenvironment
objectType: secret
objectVersion: ""
tenantId: "<Tenant-Id>"

在我的 keystore 中,我为创建和分配的服务原则提供了访问策略 Secret Permissions: GET并创建了一个名为

的 secret
Name: aspnetcoreenvironment
value: Development

到目前为止一切都很顺利,但是当我运行部署时。并使用命令 kubectl describe pod <podname>我看到错误,它阻止容器启动

Warning  Failed     8s (x3 over 21s)  kubelet            Error: secret "aspenet-environment" not found

我尝试了不同的解决方案,但没有任何效果。如果我运行命令 kubectl get secretproviderclass我拿回了我创建的提供商。据我了解,如果没有服务需要特定的 secret ,如果我运行命令:kubectl get secret,我将无法找到我想要创建的 secret 。

我猜这是正确的,因为我的 Pod 没有启动。

关于我做错了什么或如何解决它有任何帮助或启示吗?

非常感谢大家

编辑:我发现仍然需要进行一些额外的调试。所以我确实将卷添加到了部署中。但这仍然给出错误。

正如我所意识到的,问题是。当我运行命令 kubectl apply -f secretProviderClass.yml 时,根本没有创建任何 secret ,原因是失败。所以我认为这里有些问题。应用 SecretProviderClass 不应自动创建 secret服务?

最佳答案

SecretProviderClass 对象的创建不会自动在 kubernetes 中创建 key 。仅当集群内有实际的 pod 正在使用定义的 SecretProviderClass 运行时,才会创建 secret 对象。

此行为记录在: https://learn.microsoft.com/en-us/azure/aks/csi-secrets-store-driver

将装载的内容与 Kubernetes key 同步

您可能想要创建一个 Kubernetes key 来镜像已安装的 key 内容。您的 secret 将在您启动 pod 来安装它们后同步。当您删除使用 key 的 Pod 时,您的 Kubernetes key 也将被删除。

关于azure - Aks SecretProviderClass 未找到 secret ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75097851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com