标签: kubernetes-secrets

从Kubernetes Secret将数据导入配置映射

我正在使用一个kubernetes ConfigMap,其中包含一个应用程序的数据库配置,并且有一个包含数据库密码的秘密。我需要在ConfigMap中使用此密钥,因此当我尝试在ConfigMap中添加环境变量并从密钥中指定pod部署中的值时,由于ConfigMap中的值占用了密码,因此我无法使用密码连接到mysql变量的确切字符串。

apiVersion: v1
kind: ConfigMap
metadata:
  name: config
data:
  APP_CONFIG: |
    port: 8080
    databases:
      default:
        connector: mysql
        host: "mysql"
        port: "3306"
        user: "root"
        password: "$DB_PASSWORD"
Run Code Online (Sandbox Code Playgroud)

和deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: app
  labels:
    app: backend
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
      - name: app
        image: simple-app-image
        ports:
          - name: "8080"
            containerPort: 8080
        env:
          - name: APP_CONFIG
            valueFrom:
              configMapKeyRef:
                name: config
                key: APP_CONFIG
          - name: DB_PASSWORD
            valueFrom:
              secretKeyRef:
                name: "mysql-secret"
                key: "mysql-root-password"
Run Code Online (Sandbox Code Playgroud)

注意:秘密存在,我能够获取“ mysql-root-password”值并用于登录数据库

kubernetes kubernetes-secrets

7
推荐指数
1
解决办法
3801
查看次数

带有秘密的 livenessProbe 在 Kubernetes 中不起作用

我正在尝试在我的 kubernetes 部署 yaml 文件中传递 livenessProbe 以执行我的应用程序的运行状况。所以,我用令牌值创建了一个秘密,并按如下方式传递

      livenessProbe:
        httpGet:
          path: test/actuator/health
          port: 9001
          httpHeaders:
          - name: Authorization
            valueFrom:
              secretKeyRef:
                name: actuator-token
                value: token
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误

error: error validating "deployment.yaml": error validating data: [ValidationError(Deployment.spec.template.spec.containers[0].livenessProbe.httpGet.httpHeaders[0]): unknown field "valueFrom" in io.k8s.api.core.v1.HTTPHeader, ValidationError(Deployment.spec.template.spec.containers[0].livenessProbe.httpGet.httpHeaders[0]): missing required field "value" in io.k8s.api.core.v1.HTTPHeader, ValidationError(Deployment.spec.template.spec.containers[0].readinessProbe.httpGet.httpHeaders): invalid type for io.k8s.api.core.v1.HTTPGetAction.httpHeaders: got "map", expected "array"]; if you choose to ignore these errors, turn validation off with --validate=false

请建议并感谢您的帮助。

另外让我们知道他们有什么更好的处理令牌的方法,因为我不想直接在我的部署 yaml 文件上提供令牌值。

spring-boot kubernetes kubernetes-secrets

7
推荐指数
2
解决办法
3467
查看次数

如果在正在运行的 Pod 中作为卷安装的 configMap(/secret) 在主服务器上被删除,会发生什么?

假设我有一个带有 configMap(或秘密)卷的 pod。ConfigMap(或秘密)对象在 Pod 创建期间存在,但我在 Pod 运行时删除了主服务器上的 configMap(或秘密)对象。预期的行为是什么?它在任何地方都有记录吗?

正在运行的 Pod 是否已终止?configMap(或秘密)文件是否被删除并且 pod 继续运行?

这是我能找到的有关更新的文档,没有提及任何有关删除的内容。

当更新已在卷中使用的 ConfigMap 时,投影键最终也会更新。Kubelet 在每次定期同步时都会检查已安装的 ConfigMap 是否是最新的。但是,它使用本地基于 ttl 的缓存来获取 ConfigMap 的当前值。因此,从 ConfigMap 更新到新 key 投射到 pod 的总延迟可以长达 kubelet 同步周期 + kubelet 中 ConfigMap 缓存的 ttl。

kubernetes kubelet kubernetes-secrets configmap

6
推荐指数
1
解决办法
2021
查看次数

如何在不终止部署的情况下刷新 Worker Secret?

我想学习如何在不终止和重新创建部署的情况下更新工作 Pod 中的机密。

目前 pod 将秘密作为 env vars 提取:

        env:
        - name: SECRET_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              key: secret_access_key
              name: secrets
Run Code Online (Sandbox Code Playgroud)

但这只发生在他们启动时。

因此,如果需要更改秘密,我必须:

  1. 改变秘密 secrets.yaml
  2. kubectl apply -f secrets.yaml
  3. kubectl delete -f worker-deployment.yaml
  4. kubectl apply -f worker-deployment.yaml

我真的不喜欢第 3 步和第 4 步,因为它们会终止正在进行的工作。

更新 env var 机密的更好的工作流程是什么?

kubernetes kubectl kubernetes-secrets amazon-eks

6
推荐指数
2
解决办法
3683
查看次数

使用单个卷从 secrets 或 configmaps 挂载多个文件

我使用一个秘密来存储多个数据项,如下所示:

apiVersion: v1
kind: Secret
metadata:
  name: my-certs
  namespace: my-namespace
data:
  keystore.p12: LMNOPQRSTUV
  truststore.p12: ABCDEFGHIJK
Run Code Online (Sandbox Code Playgroud)

在我的Deployment我将它们安装到这样的文件中:

volumeMounts:
- mountPath: /app/truststore.p12
    name: truststore-secret
    subPath: truststore.p12
- mountPath: /app/keystore.p12
    name: keystore-secret
    subPath: keystore.p12
volumes:
- name: truststore-secret
secret:
    items:
    - key: truststore.p12
    path: truststore.p12
    secretName: my-certs
- name: keystore-secret
secret:
    items:
    - key: keystore.p12
    path: keystore.p12
    secretName: my-certs
Run Code Online (Sandbox Code Playgroud)

这按预期工作,但我想知道是否可以实现将这两个秘密安装为具有较少 Yaml 的文件的相同结果?例如volumes使用,items但我不知道如何使用一个卷和多个卷items并安装它们。

kubernetes kubernetes-secrets

6
推荐指数
1
解决办法
4326
查看次数

如果我可以解码 Kubernetes 机密,它们有什么意义?

我可以轻松获取存储在Kubernetes.

$ kubectl get secret my-app-secrets -o yaml
Run Code Online (Sandbox Code Playgroud)

从我要解码的输出中选择秘密值。

例子 ZXhwb3NlZC1wYXNzd29yZAo=

$ echo ZXhwb3NlZC1wYXNzd29yZAo= | base64 --decode
> exposed-password
Run Code Online (Sandbox Code Playgroud)

我不确定我是否了解Kubernetes生态系统中的秘密资源的有效性,因为它很容易获得。

kubernetes kubernetes-security kubernetes-secrets

6
推荐指数
2
解决办法
1126
查看次数

Kubernetes 卷挂载权限对于 Secret 不正确

我正在挂载一个 k8s 机密作为卷挂载,并且 pod 中的文件具有错误的权限。

在我Deploymentvolumes数组中有这个条目:

        - name: ssh-host-keys
          secret:
            secretName: ftp-ssh-host-keys
            defaultMode: 0600
Run Code Online (Sandbox Code Playgroud)

然后像这样安装:

            - mountPath: /etc/ssh/ssh_host_rsa_key
              name: ssh-host-keys
              subPath: ssh_host_rsa_key
              readOnly: true
Run Code Online (Sandbox Code Playgroud)

但是,当我查看Pod文件权限中的文件时:

rw-r--r-- 1 root root 553122 Aug 21  2018 moduli
-rw-r--r-- 1 root root   1723 Aug 21  2018 ssh_config
-rw-r----- 1 root 1337    410 May 11 10:33 ssh_host_ed25519_key
-rw-r----- 1 root 1337   3242 May 11 10:33 ssh_host_rsa_key
-rw-r--r-- 1 root 1337    465 May 11 10:33 sshd_config
Run Code Online (Sandbox Code Playgroud)

即密钥具有权限 0644 而不是 0600。 …

kubernetes kubernetes-secrets

6
推荐指数
2
解决办法
2956
查看次数

如何在 Kubernetes 中使用 HTTPS 在本地运行 asp.net 核心

我目前有一个用于 Asp.Net Core 的 docker-compose 设置。但是,在 Kubernetes 中测试集群时,我遇到了 Kestral 的 SSL 问题。最初使用 Docker/Docker-compose 你可以设置本地 SSL

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\<app_name>.pfx -p <password>
Run Code Online (Sandbox Code Playgroud)

然后

dotnet dev-certs https --trust
Run Code Online (Sandbox Code Playgroud)

最后

dotnet user-secrets set "Kestrel:Certificates:Development:Password" "<password>"
Run Code Online (Sandbox Code Playgroud)

在 Docker-compose 中,我将卷设置为指向此证书

volumes:
      - ${APPDATA}\microsoft\UserSecrets\:/root/.microsoft/usersecrets
      - ${USERPROFILE}\.aspnet\https:/root/.aspnet/https/
Run Code Online (Sandbox Code Playgroud)

我很好奇如何使用 kubernetes 在本地测试 https。我看到了一个 git repo https://github.com/Lybecker/k8s-friendly-aspnetcore,但是我不知道如何将 .pfx 文件从我的本地计算机获取到秘密中,我认为复制和粘贴不是要走的路。

我在http 和 https 上查看了这个 SO post Access .NET Core app on Kubernetes on Kubernetes

但是看起来他们正在使用使用 .key 和 .crt 的 .Net 5。我在使用 .pfx 文件的 .Net 3.1 上。

ssl kubernetes asp.net-core kubernetes-secrets

6
推荐指数
1
解决办法
546
查看次数

在基于 Python 的应用程序中从 Kubernetes 读取机密

I\xe2\x80\x99m 打包一个 Python 应用程序以在 Kubernetes 集群中使用。在代码库中存在此方法:

\n
   def get_pymongo_client(self):\n        username = test;\n        password = \'test\';\n        url = \xe2\x80\x98test\n        conn_str = "mongodb+srv://" + username + ":" + password + \xe2\x80\x9c/\xe2\x80\x9d+ url\n\n        return pymongo.MongoClient(conn_str)\n
Run Code Online (Sandbox Code Playgroud)\n

I\xe2\x80\x99m 尝试保护用户名、密码和 URL 字段,以便它们在 src 代码中不可见。为此,我打算使用秘密。

\n

URL https://kubernetes.io/docs/tasks/configmap-secret/managing-secret-using-kubectl/详细介绍了如何创建密钥。但我\xe2\x80\x99m 不知道如何从Python 应用程序读取秘密。

\n

我的应用程序的 .Dockerfile:

\n
#https://docs.docker.com/language/python/build-images/\n\nFROM python:3.8-slim-buster\n\nWORKDIR /app\n\nCOPY requirements.txt requirements.txt\n\nRUN pip3 install -r requirements.txt\n\nCOPY . .\n\nCMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]\n
Run Code Online (Sandbox Code Playgroud)\n

阅读Python Flask application access to docker Secrets in a swarm详细介绍了 …

python docker kubernetes docker-secrets kubernetes-secrets

6
推荐指数
1
解决办法
8693
查看次数

K8s Operator 使用事件过滤器监听秘密更改

几个月前我们创建了一个控制器,它使用 kubebuilder 运行得很好。

\n

几周前,我们将 \xe2\x80\x9clistener\xe2\x80\x9d 添加到秘密中,当秘密更改时(秘密属性)\n应该调用协调,问题是它有时有效有时无效, (您更改秘密应用它并且协调不会发生\xe2\x80\x99t),我们正在为完全相同的秘密文件执行此操作

\n

我们尝试了几天来找到根本原因,但没有成功,(我们将k8s.io/client-go v0.23.4和 更改为v0.22.3,现在 v0.22.1这才起作用。\n知道问题可能是什么吗?任何提示都会有帮助。或者我们有任何其他方法可以做到这一点可以尝试一下。

\n
func (r *vtsReconciler) SetupWithManager(mgr ctrl.Manager) error {\n    manager := ctrl.NewControllerManagedBy(mgr).\n        For(&vts.str).\n        WithEventFilter(predicate.Or(predicate.AnnotationChangedPredicate{}))\n    manager = manager.Watches(&source.Kind{Type: &v1.Secret{}}, handler.EnqueueRequestsFromMapFunc(func(a client.Object) []reconcile.Request {\n        return r.SecretRequests.SecretFinder(a.GetName())\n    }))\n    return manager.Complete(r)\n}\n\n\n\nfunc (secm *SecretMapper) SecretFinder(name string) []reconcile.Request {\n    v := cli.ObjectKey{Name: name}\n    return secm.SecMap[v.String()]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

go kubernetes kubernetes-secrets kubebuilder

6
推荐指数
1
解决办法
1854
查看次数