标签: kubernetes-secrets

有没有办法将Kubernetes秘密值放在yaml文件的args字段中

我有一个kubernetes yaml部署文件,它接受db用户名和密码作为参数,如下所示.

args:
        - "-db_host=postgres"
        - "-db_port=5432"
        - "-db_username=postgres"
        - "-db_password=postgres"
Run Code Online (Sandbox Code Playgroud)

为了隐藏db_username和db_password的值,我想到了使用kubernetes的秘密类型.但要实现这一点,我必须将db_username和db_password作为环境变量,以便我可以使用它,如下所示:

args:
        - "-db_host=postgres"
        - "-db_port=5432"
env:
        - name: db_username
          valueFrom:
            secretKeyRef:
              name: db-secret
              key: db-user
        - name: db_password
          valueFrom:
            secretKeyRef:
              name: db-secret
              key: db-pass
Run Code Online (Sandbox Code Playgroud)

我们有什么方法可以在args中使用秘密,这样我就不必采用第二种方法了.

kubernetes kubernetes-security kubernetes-secrets

5
推荐指数
1
解决办法
1390
查看次数

Golang 结构体中名称和类型后面的字符串是什么?

我正在查看https://godoc.org/k8s.io/api/core/v1#Secret

type Secret struct {
    metav1.TypeMeta `json:",inline"`
    // Standard object's metadata.
    // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
    // +optional
    metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`

    // Data contains the secret data. Each key must consist of alphanumeric
    // characters, '-', '_' or '.'. The serialized form of the secret data is a
    // base64 encoded string, representing the arbitrary (possibly non-string)
    // data value here. Described in https://tools.ietf.org/html/rfc4648#section-4
    // +optional
    Data map[string][]byte `json:"data,omitempty" protobuf:"bytes,2,rep,name=data"`

    // stringData allows specifying non-binary secret data in string form. …
Run Code Online (Sandbox Code Playgroud)

struct go kubernetes-secrets

5
推荐指数
1
解决办法
3084
查看次数

如何在 Kubernetes Secrets 中生成随机字符串/密码

现在,我使用静态文件部署我的应用程序 pod,其中之一是app-secrets.yaml部署应用程序的所有秘密

---
apiVersion: v1
kind: Secret
metadata:
  name: app-secrets
type: Opaque
data:
  root: xxxxxx
  user1: xxxxxx
  user2: xxxxxx
Run Code Online (Sandbox Code Playgroud)

但这既不安全也不方便(如果我需要另一个应用程序实例,我必须使用人工生成的密码创建另一个文件)。

我希望在创建应用程序时生成随机密码,但我不知道是否可行。我已经看过主题秘密,特别是secretGenerator但这并不是我所理解的直接想要的,因为它不会创建随机字符串而是随机秘密名称,例如secret/app-secrets-ssdsdfmfh4k但我仍然必须提供密码。

kubernetes kubernetes-secrets

5
推荐指数
1
解决办法
4589
查看次数

在 tomcat catalina.properties 中注入环境变量 [Kubernetes]

我正在使用 kubernetes 进行 Web 应用程序部署。

  containers:
  - name: myapp
    image: tomcat8-jre8:latest
    imagePullPolicy: Always
    env:     
    - name: DATABASE_HOST
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: external.database.host
    - name: DATABASE_USER
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: external.database.user
    - name: DATABASE_PASSWORD
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: external.database.password
Run Code Online (Sandbox Code Playgroud)

我还将 tomcat JNDI 与自定义 server.xml 和 catalina.properties 一起使用

 <Resource factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            name="jdbc/mysource" 
            auth="Container" 
            type="javax.sql.DataSource" 
            driverClassName="org.postgresql.Driver" 
            url="jdbc:postgresql://******" # secret url
            username="${database.user}"      
            password="${database.password}" />
Run Code Online (Sandbox Code Playgroud)

我尝试将新属性放入 catalina.properties

### catalina specific configuration
database.user = ${DATABASE_USER}              
database.password = ${DATABASE_PASSWORD}   
Run Code Online (Sandbox Code Playgroud)

server.xml 可以很好地读取属性,但无法解析环境变量 ${DATABASE_USER} 和 ${DATABASE_PASSWORD}

server.xml …

tomcat catalina kubernetes kubernetes-secrets

5
推荐指数
2
解决办法
8147
查看次数

Kubernetes 是否以 JSON 格式作为输入文件来创建 configmap 和 secret?

我有一个 JSON 格式的现有配置文件,如下所示

{
    "maxThreadCount": 10,
    "trackerConfigs": [{
            "url": "https://example1.com/",
            "username": "username",
            "password": "password",
            "defaultLimit": 1
        },
        {
            "url": "https://example2.com/",
            "username": "username",
            "password": "password",
            "defaultLimit": 1
        }
    ],
    "repoConfigs": [{
        "url": "https://github.com/",
        "username": "username",
        "password": "password",
        "type": "GITHUB"
    }],
    "streamConfigs": [{
        "url": "https://example.com/master.json",
        "type": "JSON"
    }]
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用 --from-file 选项传递键/值对属性文件,用于配置映射和秘密创建。

但是 JSON 格式的文件呢?Kubernetes 是否也将 JSON 格式文件作为输入文件来创建 configmap 和 secret?

$ kubectl create configmap demo-configmap --from-file=example.json
Run Code Online (Sandbox Code Playgroud)

如果我运行此命令,它会显示已创建 configmap/demo-configmap。但是如何在其他 pod 中引用此 configmap 值?

kubernetes kubernetes-pod kubernetes-secrets configmap

5
推荐指数
1
解决办法
1万
查看次数

一个获取秘密名称和秘密令牌的班轮命令

替换如下 2 个命令来获取 Kubernetes 秘密令牌的一个线性命令是什么?示例用例将从 kubernetes-dashboard-admin 的密钥中获取令牌以登录和查看 kubernetes-dashboard。

命令示例:

$ kubectl describe serviceaccount default
Name:                default
Namespace:           default
Labels:              <none>
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   default-token-zvxf4
Tokens:              default-token-zvxf4
Events:              <none>

$ kubectl describe secret default-token-zvxf4
Name:         default-token-zvxf4
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: default
              kubernetes.io/service-account.uid: 809835e7-2564-439f-82f3-14762688ca80

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  7 bytes
token:      TOKENHERE
Run Code Online (Sandbox Code Playgroud)

jsonpath kubernetes kubectl kubernetes-dashboard kubernetes-secrets

5
推荐指数
1
解决办法
4744
查看次数

kubernetes 部署将 Secret 安装为文件夹而不是文件

我有一个配置文件作为 kubernetes 中的秘密,我想将其安装到容器内的特定位置。问题在于,在容器内创建的卷是一个文件夹,而不是其中包含机密内容的文件。有办法解决吗?我的部署如下所示:

kind: Deployment
apiVersion: apps/v1
metadata:
  name: jetty
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jetty
  template:
    metadata:
      labels:
        app: jetty
    spec:
      containers:
        - name: jetty
          image: quay.io/user/jetty
          ports:
            - containerPort: 8080
          volumeMounts:
          - name: config-properties
            mountPath: "/opt/jetty/config.properties"
            subPath: config.properties
          - name: secrets-properties
            mountPath: "/opt/jetty/secrets.properties"
          - name: doc-path
            mountPath: /mnt/storage/
          resources:
            limits:
              cpu: '1000m'
              memory: '3000Mi'
            requests:
              cpu: '750m'
              memory: '2500Mi'
      volumes:
      - name: config-properties
        configMap:
          name: jetty-config-properties
      - name: secrets-properties
        secret: 
          secretName: jetty-secrets
      - name: doc-path …
Run Code Online (Sandbox Code Playgroud)

volumes kubernetes kubernetes-secrets

5
推荐指数
1
解决办法
1万
查看次数

如何在 Helm 中使用环境/秘密变量?

在我的舵图中,我有一些需要输入凭据的文件例如

<Resource
    name="jdbc/test"
    auth="Container"
    driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
    url="jdbc:sqlserver://{{ .Values.DB.host }}:{{ .Values.DB.port }};selectMethod=direct;DatabaseName={{ .Values.DB.name }};User={{ Values.DB.username }};Password={{ .Values.DB.password }}"
    />
Run Code Online (Sandbox Code Playgroud)

我创造了一个秘密

Name: databaseinfo
   Data:
     username
     password
Run Code Online (Sandbox Code Playgroud)

然后,我创建环境变量以在部署.yaml 中检索这些机密:

env:
   - name: DBPassword
      valueFrom:
      secretKeyRef:
        key: password
        name: databaseinfo
   - name: DBUser
       valueFrom:
       secretKeyRef:
         key: username
         name: databaseinfo 
Run Code Online (Sandbox Code Playgroud)

在我的values.yaml 或其他文件中,我需要能够引用这个秘密/环境变量。我尝试了以下方法,但它不起作用:values.yaml

DB:
  username: $env.DBUser
  password: $env.DBPassword
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-helm kubernetes-secrets

5
推荐指数
1
解决办法
2万
查看次数

检查哪个部署(如果有)正在使用机密

我正在替换 Kubernetes 秘密,我想确保捕获集群中使用它的所有位置。

有没有一种方法可以在不阅读所有使用 K8s 或 helm 的部署 YAML 的情况下进行判断?

我们在同一个集群上部署了多个服务并共享秘密。有些使用 Helm,有些则不使用。

kubernetes kubernetes-helm kubernetes-secrets

5
推荐指数
1
解决办法
2593
查看次数

如何从 K3s 集群中的应用程序 pod 中删除机密的依赖关系

我有一个 k3s 集群,我的应用程序 Pod 正在运行。当我登录(使用命令)时,在所有 Pod 中kubectl exec <pod_name> -n <ns> -it /bin/bash都有kubernetes.io一个目录,其中包含任何人都可以获得的秘密令牌 cat token

root@Ubuntu-VM: kubectl exec app-test-pod -n app-system -it /bin/bash
root@app-test-pod:/var/run/secrets/kubernetes.io/serviceaccount# ls -lhrt
total 0
lrwxrwxrwx 1 root root 12 Oct 11 12:07 token -> ..data/token
lrwxrwxrwx 1 root root 16 Oct 11 12:07 namespace -> ..data/namespace
lrwxrwxrwx 1 root root 13 Oct 11 12:07 ca.crt -> ..data/ca.crt
Run Code Online (Sandbox Code Playgroud)

这似乎是一个安全威胁(或漏洞)。有人可以让我知道是否有办法从 pod 中删除此依赖项,以便我可以限制用户(甚至是 root 用户)在登录 pod 时访问此机密?另外,如果这是可能的,那么 pod 将如何与 API 服务器通信?

kubernetes kubernetes-security kubernetes-pod kubernetes-secrets k3s

5
推荐指数
1
解决办法
364
查看次数