如何在kubernetes中将secret标记为可选或必选?

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 如何在kubernetes中将secret标记为可选或必选?

目录

使用环境变量方式创建带有secret的pod

创建username为bob的secret

创建带有secret的pod

返回信息

解释  Optional: false

源码说明

在kubernetes中将secret标记为可选或必选?



使用环境变量方式创建带有secret的pod

创建username为bob的secret

kubectl create secret generic super-secret --from-literal=username=bob


创建带有secret的pod

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: pod-secrets-via-env
  name: pod-secrets-via-env
spec:
  volumes:
  - name: super-secret
    secret:
      secretName: super-secret
  containers:
  - image: redis
    name: pod-secrets-via-env
    resources: {}
    env:
    - name: CREDENTIALS
      valueFrom:
        secretKeyRef:
          name: super-secret
          key: username
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}


返回信息

$ kubectl describe pod pod-secrets-via-env
Name:         pod-secrets-via-env
Namespace:    default
Priority:     0
Node:         minikube/172.17.0.10
Start Time:   Tue, 28 Apr 2020 08:53:31 +0000
Labels:       run=pod-secrets-via-env
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"creationTimestamp":null,"labels":{"run":"pod-secrets-via-env"},"name":"pod-s...
Status:       Running
IP:           172.18.0.4
IPs:
  IP:  172.18.0.4
Containers:
  pod-secrets-via-env:
    Container ID:   docker://6175f7ac701a68852609a1d4a023153033929b24d1fbbab45ca639ea36c054d6
    Image:          redis
    Image ID:       docker-pullable://redis@sha256:157a95b41b0dca8c308a33489dfdb28019e033110320414b4b16fad7d28c0f9f
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Tue, 28 Apr 2020 08:53:41 +0000
    Ready:          True
    Restart Count:  0
    Environment:
      CREDENTIALS:  <set to the key 'username' in secret 'super-secret'>  Optional: false
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-5qltp (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  super-secret:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  super-secret
    Optional:    false
  default-token-5qltp:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-5qltp
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  12m   default-scheduler  Successfully assigned default/pod-secrets-via-env to minikube
  Normal  Pulling    12m   kubelet, minikube  Pulling image "redis"
  Normal  Pulled     12m   kubelet, minikube  Successfully pulled image "redis"
  Normal  Created    12m   kubelet, minikube  Created container pod-secrets-via-env
  Normal  Started    12m   kubelet, minikube  Started container pod-secrets-via-env


解释 <set to the key '' in secret ''>  Optional: false

要将secret作为环境变量使用在pod中,除非将secret标记为可选,否则必须先创建secret。

引用不存在的secret将阻止容器启动。

 - name: ENV_NAME
    valueFrom:
      secretKeyRef:
        name: <secrets name>
        key: <secrets key>
        optional: true


源码说明

// SecretKeySelector selects a key of a Secret.
type SecretKeySelector struct {
  // The name of the secret in the pod's namespace to select from.
  LocalObjectReference
  // The key of the secret to select from.  Must be a valid secret key.
  Key string
  // Specify whether the Secret or it's key must be defined
  // +optional
  Optional *bool
}


kubernetes中将secret标记为可选或必选?

optional设置为false或 true即可,默认是false


参考链接:

https://github.com/kubernetes/kubernetes/blob/e9e190c57c61a88a2ba96c4b0688b8eb3a8945a8/pkg/apis/core/types.go#L1762



相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
Kubernetes 关系型数据库 MySQL
|
4月前
|
运维 Kubernetes 容器
【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client secret keys for app ****** are expired)
【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client secret keys for app ****** are expired)
【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client secret keys for app ****** are expired)
|
2月前
|
存储 Kubernetes 数据安全/隐私保护
k8s学习--Secret详细解释与应用
Secret 支持四种类型: - **Opaque Secrets**:存储任意类型机密数据,需自行加密。 - **Service Account Token Secrets**:自动管理 API 访问令牌。 - **Docker Registry Secrets**:存储 Docker 私有仓库认证信息。 - **TLS Secrets**:存储 TLS 证书和私钥,用于加密通信。
216 0
|
4月前
|
存储 Kubernetes 数据安全/隐私保护
k8s学习笔记之ConfigMap和Secret
k8s学习笔记之ConfigMap和Secret
|
4月前
|
存储 Kubernetes 安全
在k8S中,Secret 有哪些使用方式?
在k8S中,Secret 有哪些使用方式?
|
4月前
|
Kubernetes 数据安全/隐私保护 容器
Kubernetes(K8S) 配置管理 Secret 介绍
Kubernetes(K8S) 配置管理 Secret 介绍
50 1
|
4月前
|
Prometheus Kubernetes 数据安全/隐私保护
使用kubeseal加密和管理k8s集群的secret
使用kubeseal加密和管理k8s集群的secret
71 2
|
4月前
|
Kubernetes 容器 Perl
在K8S中,请问harbor的secret创建能否直接创建资源清单?
在K8S中,请问harbor的secret创建能否直接创建资源清单?
|
4月前
|
存储 Kubernetes 安全
在k8S中,Kubernetes Secret 作用是什么?
在k8S中,Kubernetes Secret 作用是什么?
|
7月前
|
存储 Kubernetes 数据安全/隐私保护
Kubernetes的ConfigMap和Secret
Kubernetes的ConfigMap和Secret
134 0