Kubernetes学习之Secret

K8S学习指南(19)-k8s核心对象secret 在Kubernetes中,Secret是一种用于存储敏感信息的对象,如密码、令牌、密钥等。它主要用于将这些敏感信息以安全的方式传递给Pod中的容器。Secret对象通常包含Base64编码的数据,以确保在Kubernetes中的传输过程中保持安全性。安全存储敏感信息:将密码、令牌等敏感信息存储在Secret对象中,避免明文存储,提高安全性。传递给Pod中的容器:通过挂载Secret到Pod中,容器可以读取其中的敏感信息,实现应用程序的安全配置。用于TLS证书。 阅读详情

一、认识Secret
  Secret资源的功能类似于ConfigMap,但是它专用于存放敏感数据,例如密码、数字证书、私钥、令牌和SSH key等。
  Secret对象存储数据的方式及使用方法类似于ConfigMap对象,以键值对方式存储数据,在Pod资源中通过环境变量或存储卷进行数据访问。不同的是,Secret对象仅会被分发至调用了此对象的Pod资源所在的工作节点,且只能由节点将其存储于内存中。另外,Secret对象的数据的存储及打印格式为Base64编码的字符串,因此用户在创建Secret对象时也要提供此种编码格式的数据。不过,在容器中以环境变量或存储卷的方式访问时,它们会被自动解码为明文格式。
  需要注意的是,在Master节点上,Secret对象以非加密的格式存储于etcd中,因此管理员必须加以精心管控以确保敏感数据的机密性,必须确保etcd集群节点间以及与API Server的安全通信,etcd服务的访问授权,还包括用户访问API Server时的授权,因为拥有创建Pod资源的用户都可以使用Secret资源并能够通过Pod中的容器访问其数据。
  Secret对象主要有两种用途,一是作为存储卷注入到Pod上由容器应用程序所使用,二是用于kubelet为Pod里的容器拉取镜像时向私有仓库提供认证信息。不过,后面使用ServiceAccount资源自建的Secret对象是一种更安全的方式。通过ConfigMap和Secret配置容器的方式如下图:
在这里插入图片描述
  Secret资源主要由四种类型组成,具体如下:
  Opaque:自定义数据内容;base64编码,用来存储密码、秘钥、信息、证书等数据,类型标识符为generic。
  kubernetes.io/service-account-token:Service Account的认证信息,可在创建Servcie Account时由Kubernetes自动创建。
  kubernetes.io/dockerconfigjson:用来存储Docker镜像仓库的认证信息,类型标识为docker-registry。
  kubernetes.io/tls:用于为SSL通信模式存储证书和私钥文件,命令式创建时类型标识为tls。

二、命令式创建Secret资源
  不少场景中,Pod中的应用都需要通过用户名和面来访问其他服务,例如访问数据库系统等等。创建此类的Secret对象时,可以使用"kubelet create secret generic <SECRET_NAME> --from-literal=key=value"命令直接进行创建,不过为用户认证之需进行创建时,其使用的键名通常是username和password。例如下面的例子,以"root/123456"分别为用户名和密码创建了一个名为mysql-auth的Secret对象:

1)创建Secret资源对象

]# kubectl create secret generic mysq-auth --from-literal=username=root --from-literal=password=123456
secret/mysq-auth created

2)查看Secret资源对象的详细信息

]# kubectl get secret -o wide 
NAME                  TYPE                                  DATA   AGE
mysq-auth             Opaque                                2      17s

]# kubectl describe secret mysql-auth
Name:         mysql-auth
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password:  6 bytes
username:  4 bytes

# kubectl get secret mysql-auth -o yaml 
apiVersion: v1
data:
  password: MTIzNDU2
  username: cm9vdA==
kind: Secret
metadata:
  creationTimestamp: "2020-08-30T09:56:41Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:password: {}
        f:username: {}
      f:type: {}
    manager: kubectl
    operation: Update
    time: "2020-08-30T09:56:41Z"
  name: mysql-auth
  namespace: default
  resourceVersion: "6479799"
  selfLink: /api/v1/namespaces/default/secrets/mysql-auth
  uid: e6c28302-9480-408f-a657-6ba23869c833
type: Opaque

3)尝试解密查看数据内容

]# echo cm9vdA== | base64 -d 
root

]# echo MTIzNDU2 | base64 -d 
123456

4)使用文件创建Secret资源对象
  对于本身已经已存储于文件中的数据,也可以在创建generic格式Secret对象时使用"–from-file"选项从文件中直接进行加载;例如,如下命令使用公私钥来生成Secret资源对象:

]# kubectl create secret generic ssh-key-secret --from-file=ssh-privatekey=/root/.ssh/id_rsa \
> --from-file=ssh-publickey=/root/.ssh/id_rsa.pub 
secret/ssh-key-secret created

5)查看Secret资源的详细信息

]# kubectl get secret -o wide 
NAME                  TYPE                                  DATA   AGE
ssh-key-secret        Opaque                                2      36s

]# kubectl get secret ssh-key-secret -o yaml 
apiVersion: v1
data:
  ssh-privatekey: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBdXFJSWEycHdORERjYjBRTEhKcG1PUEdxajNoRnZOQmRmVEg0YjRGbmVyRHhtOWtqCmw0WFJab0Z1ZkVUTHZuc2tQcHZYUllOeVdsN3JONW0vTit2eTVoTzdZVjErTWVORFlKb0JSMzZwT3YxUkxIN3UKdHIrbGYwRnJsMkI1ZE9EVnhHekd5c01HVE12Z1ByUWVWK3RRMkdUYk5ZWFY2cm1YVmkrbm0wczhOQnAvdnQ1cgpBVnNRdjR0ckdhak5SSHNQbUJlWDdXaVRibVlDaFBTbEcrOXV2MGcraVZxSm51VUE0aEdKNUVVZGREZGpIQmRTCldGMVg0SU83UkRKdEl3ME15RGdUUjYyYWlndjJiS1BUS1FrZ2ZoTmpvV3ZiZ0FBQzVxck95bmVXU0JUZTZPSGcKbGt2Y2tPQUtjUEM2ZlJLR0E4bTR1azFlSUJWU01TRkFvRUVyMlFJREFRQUJBb0lCQUJ1QTZYQzYvTklVS1VnVQpaUGJRSWlSZUtONS93UGMwVmJLdmZJY2lNTmU1MzhFeDNMYmx0NWc5bHNTbGRza1phSnY1WjE0Tkl2c0NaZk9KCnFzNVk3VERPMDV4anBNZEJVSnFaMTNwcnhoQzFhQk1BbWJsQXdPamlBVE1MdXBwb3o5ZmtsOThsb25ZS3pYOHcKR0JDbzB2OHd6Y1V6ZGZUamFOUUFyZGlLMjlKcG5OTFJscWdDQTZ0dE95VnpUMnJyVFZqbWx5cWhnUzRpZUlWSgo1aGZLZzF1aXdZbmlFNnJmS1E1dm03Uk45L1RhOXhpanB0cEpKQjRSdVlUQWRrZHJIRk51ZWlsYmh5dGF5SHF2CjYxOXFEM0pXYmZxanYrMzBtZnV3eXYyOG1UajVZVFVyRnhESHR3cVczaDF6bmtPYWt3ZEJEYW9zazlNdUgzZW4KVG5jS3NBRUNnWUVBNDk3dHpwRjR2VGRRL2pLbll1YWoxM0dxa1RUaU1OK2Y2Q2p6eUlYeVBMMjF0WkhyYXFWLwpmRUgyVTZCZExYUzQ2MHVub08rQnNNQi9uVzc3eHdXeFFLL3ZQNXV0QVhwZ25LZDl6TFF0UVUyL2dYYWpLSW1OCk4xK1JIQUU5dVllUVk4RlNMYWNUYzk2ZkVja3JBRnZGYTBBc2RwRXJ6SjkzK2x6alNhQUszdGtDZ1lFQTBhdnMKVkxpWnAybmhnZUNod2Nkc2Nhbno4Vkw4dHhIdjkwVm9uK1RvenRDVjEvMzNBVjRuQklEcXdSdldPV1kxZUdobgpwZ054dU5venU3RnVJRkFidGhSL3orbVBCNjBRK3lmbXVkN0xRWVIyY0lnbHF6c0lnV2hpb0ZMT1JmNkczS0dKClZNbG12MEl2eHNMNW9tYWV1bGFDNHZnL0psRUNva1ByaHNOU2xRRUNnWUJYZUdxbXdiYXNRNENtbzBFWHVOc3AKeDJzbkpEcXpjaFFLNVRWM1F0dVNyMndDRDhwamZMWHNOOUhibGhKT2NhRE9TWk5HTnNuODFGZm9VZ0w2Q2RoWgpzVzlRWm16SnhYVXlqU1RBSUdYQ3pKcDNrdGZjcHJoN2lnYkV6a0VvWjc1b1hIdzBKQTlXaWgxYmtYSWRTQjBICkozSXA3VjMzeFRzajh1WVlqQVBBT1FLQmdRQ3pzT243dWJGRnZ3SmE4bzd1cWVDUWtSelZoMCs1L1k5d2xYV1QKQXZWYXVYeVIvYitBMXBZTjBBWmd0V0NsRktsaXBlZWVhWGsrK1JJNUcxak1MSnR6TXFKUEoxVkRPTmxDeGZHQQovaVduNHNRMnNSZkhaZkptSlhYUS9PWjNLaW1lVUhxSHhZdGZBblE3bmNHZm90OEp4emFwR2lQVXpMeTdJQVpzCkdsMWVBUUtCZ0ZKRFRnMVg4Q3JTWmMwVGh2a0w5QUZwWmxtSzcxQ1BEVzg3bzQ5Y2U5cTVOWW9lTlQrbVZlak8KeDl4VDBZMkt0WTVQc1l4ZVdUSDVMM200Mk55ak93MU9ZSENiUjFMUFJFMkNEbTE4ZzM1aHRuTXNTd1hyY3c5RAp3OEthMVBqRmN3ZHg3b1dSQWR6blovM3NKdC9FaVQ5ZkQrYjIrTnpkSHZiT2ZzQlFmR1kxCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
  ssh-publickey: c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCQVFDNm9naHJhbkEwTU54dlJBc2NtbVk0OGFxUGVFVzgwRjE5TWZodmdXZDZzUEdiMlNPWGhkRm1nVzU4Uk11K2V5USttOWRGZzNKYVh1czNtYjgzNi9MbUU3dGhYWDR4NDBOZ21nRkhmcWs2L1ZFc2Z1NjJ2NlYvUVd1WFlIbDA0TlhFYk1iS3d3Wk15K0ErdEI1WDYxRFlaTnMxaGRYcXVaZFdMNmViU3p3MEduKyszbXNCV3hDL2kyc1pxTTFFZXcrWUY1ZnRhSk51WmdLRTlLVWI3MjYvU0Q2SldvbWU1UURpRVlua1JSMTBOMk1jRjFKWVhWZmdnN3RFTW0wakRReklPQk5IclpxS0MvWnNvOU1wQ1NCK0UyT2hhOXVBQUFMbXFzN0tkNVpJRk43bzRlQ1dTOXlRNEFwdzhMcDlFb1lEeWJpNlRWNGdGVkl4SVVDZ1FTdlogcm9vdEBtYXN0ZXIK
kind: Secret
metadata:
  creationTimestamp: "2020-08-30T10:04:52Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:ssh-privatekey: {}
        f:ssh-publickey: {}
      f:type: {}
    manager: kubectl
    operation: Update
    time: "2020-08-30T10:04:52Z"
  name: ssh-key-secret
  namespace: default
  resourceVersion: "6481203"
  selfLink: /api/v1/namespaces/default/secrets/ssh-key-secret
  uid: 2fa50101-13fb-445c-a91d-acf5d8df35fd
type: Opaque

6)创建TLS类型的Secret资源

]# (umask 077;openssl genrsa -out nginx.key 2048)

]# openssl req -new -x509 -key nginx.key -out nginx.crt -subj /C=CN/ST=Beijing/O=DevOps/CN=www.ilinux.io

]# kubectl create secret tls nginx-ssl --key=nginx.key --cert=nginx.crt 
secret/nginx-ssl created

7)查看TLS类型的Secret资源对象

]# kubectl get secret -o wide 
NAME                  TYPE                                  DATA   AGE
nginx-ssl             kubernetes.io/tls                     2      40s

]# kubectl get secret nginx-ssl -o yaml 
apiVersion: v1
data:
  tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURZekNDQWt1Z0F3SUJBZ0lKQU5mblh6TE1NQnZ4TUEwR0NTcUdTSWIzRFFFQkN3VUFNRWd4Q3pBSkJnTlYKQkFZVEFrTk9NUkF3RGdZRFZRUUlEQWRDWldscWFXNW5NUTh3RFFZRFZRUUtEQVpFWlhaUGNITXhGakFVQmdOVgpCQU1NRFhkM2R5NXBiR2x1ZFhndWFXOHdIaGNOTWpBd09ETXdNVEF4TURNMVdoY05NakF3T1RJNU1UQXhNRE0xCldqQklNUXN3Q1FZRFZRUUdFd0pEVGpFUU1BNEdBMVVFQ0F3SFFtVnBhbWx1WnpFUE1BMEdBMVVFQ2d3R1JHVjIKVDNCek1SWXdGQVlEVlFRRERBMTNkM2N1YVd4cGJuVjRMbWx2TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQwpBUThBTUlJQkNnS0NBUUVBdjAwcm5zeUZUY1pPbWJEMTA4aXhFcDd6T0pvaFlaVDBuVE14Ti9Edmg2cDhrajhsCkZTRVRZOCtwdVh0dXllemNSNUdJU3BNeGdiWnN3U0F0Z3AySmIvZ0JQOElrQUR2dGc1SnlGbjFRaFlzRnBSdUoKaHRCcW1QRnEwSktFbStZMVZmYURBc0NndjVockkrL1BIOXFQYVExMWhUVFdEYWJKU0V2WHRjb3l1Y1ZBMTd3dQoyNFRFYTR3NTZpM1IvZVlseW9MZnBrdW9MQzBuQm1Ub1RhWWdoTGNwNG9IblhJVWdiSkJlUHIreVFRelE1TmQ0CkdQbG0vOVB4U05mYVBzZ1VQM2llb1BIaTNjT1NCRzlGb0ZGT1RFV0dEdTBIRVNuRUREek1FdnBqNXphRTBGVUYKSmpJNy9VczBiTEUxbTFidlRxNDZCK2MwMWNPd0ZDSTgvTHpUOXdJREFRQUJvMUF3VGpBZEJnTlZIUTRFRmdRVQpvN3pLNkQ0ZGgzb0J3WWVDYlRiN1ptRGorWG93SHdZRFZSMGpCQmd3Rm9BVW83eks2RDRkaDNvQndZZUNiVGI3ClptRGorWG93REFZRFZSMFRCQVV3QXdFQi96QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFjM1lrTmg5RUt1UzYKUGRJbFg4Z3B1UW9EZ1dkaFJLWmZ1cHJHZEY3SnpYM1VheTZYL3QwU096QXhTU1RHdVVFVnRGaDdzVEwzS2F4ZgpsSnVYK1JnYjZ0ZVZRY3N5MHJ0cURHc0dwRHZLcXlnU2R1N05BcllOalhaMHVuQ3hwOEZiVjlYQVowQmRxeUZLClgrTHV5Q0dQclQ1bC9JZUt1OTNLVWFVZEZZUmJVUmhlOWE5bndQMFN4VWtJdW95U0tkQ3YyUExjb3B3ajMxRy8KODdMRkg4QUp5K2JjRHVmemJXbUtOdVhIRXhFZ0ZRakxORitlNXJwRElzNjYvMTFlOXdiRDIrSjdFbDFKUHRZTQptcWFUaEc1Q1VIcU9FQmVLd3VCenhwU1BGUlRJbmJyem1oTU0xbndQTENMQkVxUkRCQUtpV3lSYzV6b2FwZ1BiCkZJVDJpVjlYUWc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
  tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBdjAwcm5zeUZUY1pPbWJEMTA4aXhFcDd6T0pvaFlaVDBuVE14Ti9Edmg2cDhrajhsCkZTRVRZOCtwdVh0dXllemNSNUdJU3BNeGdiWnN3U0F0Z3AySmIvZ0JQOElrQUR2dGc1SnlGbjFRaFlzRnBSdUoKaHRCcW1QRnEwSktFbStZMVZmYURBc0NndjVockkrL1BIOXFQYVExMWhUVFdEYWJKU0V2WHRjb3l1Y1ZBMTd3dQoyNFRFYTR3NTZpM1IvZVlseW9MZnBrdW9MQzBuQm1Ub1RhWWdoTGNwNG9IblhJVWdiSkJlUHIreVFRelE1TmQ0CkdQbG0vOVB4U05mYVBzZ1VQM2llb1BIaTNjT1NCRzlGb0ZGT1RFV0dEdTBIRVNuRUREek1FdnBqNXphRTBGVUYKSmpJNy9VczBiTEUxbTFidlRxNDZCK2MwMWNPd0ZDSTgvTHpUOXdJREFRQUJBb0lCQUNsMkZFb3FrWW0xdlR0YQpPeTFYaGVrL1FmKzJpQjJhSnhvYkNrUFJtRmlTL3NURG9zbmRqVkpJbzhScm1DdHpocHFNVkRtMWhUbFR6R1pmCkR2NE1Ic21CdXVPU3RETEl5a1dGNit3cjVOUE11Y0I3STJkd3JHblJpUkVEY0hKSmhxM0c2OFlnOGJZVTFzUEgKS2VFQmdhdUhHejF2b2lUN1RReTZRMXBISkk5V2JIbHk5ei9DTVFIWXZHU2J5bjVSUXVabkc3WTUzZWRuTmVOTApoVkxUaVMwdERyN1NlZlYrUmUrYkpodXpjc1pJT2IwSThOdnp4a3VMd2ZFLzV0TGFpbXhVS2Y1MFZreXIrV0VHCmhvQUs0Y05jT0xNMVV6OTNscGlrcFRCMFBVa0Vubmo3THkxaVdlNkFobTZCTzR4eERBd1cxeXNqRkdIY0FIbkUKNW9paS9HRUNnWUVBK25yMld5bmpvUUZ4aGV1bnFUd1k5a3lldDFwVzh4VHE0aGs0TGFYcVp0eHV3N3NpQUxIZQpENVQ3WTV2cFRmT0E4d2cvNHZhZ1RqWUtFZS9NVHpOZUdCTDl4Uy9KUHlLcERBVVZ6Z3ROeG9WaWdGRTZWckpyCjNSWllIdW4wKy9OS3IxSkJOaSt2L01SNGRaTjByOCtDVEdCYXAwWERvMnFyeERUNysySU5NV3NDZ1lFQXc0UmMKanpxbXJQZE5SWVpGU3RHWUdvVFpGdE9JZnBEdVFpUk16SkJjSVhVaENidktjSUg5QXBzbUpHWDJwUUs3aFBMMgo3VGNHOFhBa0NINlNiVGlFN0xHN1p2djNkWUJoSXhHWEw4M01NL2NVc1djNUJseXNEdVZBNis3Ukc1V1hFQUN0CnkzNER6eXpQeGR2bzdqcFdaTmJGdFhpaTVFN0JGSC8yZEIwQWJxVUNnWUVBdGsvTGdqMHlEbDF6bUlzV2hJcFcKak9ibDJ3U3BKdExCeDRHZHJ6UUZNWXNlSDk3VDkvZCtibzc4anRyTGJFNWhQQU4wSktsbnNxV0luTmVTT005bApuRll1V1ZqWHZObG9lM1EwRTcyTWhZTk9WNkZIdWhTeGg4RWNzSnVQRWRkYU05UEYzVC9HYzA4NWNqSzZpc0NaCjBTZU10QldHT1NxS0RReVhuN2dWYkRNQ2dZQXhTWWV2ejZBKzBDVFpsdXlXM05sVUxoTXZ6dW1FeG5KWm1COEkKSG9nckl3VE9HRm9ESExHMFczbzFDTU14ZTh2Ynl3ZjJhcjNFVlhtdjdvQnBLaXRRSThuVFAwZDFob1IyTzdQNgpLQTRITjQwdTM0K2ZpL01QMmprUWdPYVQ1cFRyUXRDTkVOcFMrci94NStzRFN3K0dZaUg3Q2tzOTlLQjEwNEJFCmF4ODF4UUtCZ1FDZzlJeG1KQlYybDhZMnJaTnEvaU00d2YwTGgyY2NYQkNjVzlZMVVHNWhUdGZCN0pyaHpseEgKc3ZFSklNNC9lVkl2a2FSTlNWNm1EdDRMdXp2dHQzZ1piSkxDM0FHQmFNZ00vVyszZWNMYllXa3dMMFNyUlc1Ugp2WHNaMzF3V2FuUCswSVd5S1NHQ1NIQXhTVnExTVJyUStYSDhjUENIcWl0SFFiYTUyUnZRYXc9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
kind: Secret
metadata:
  creationTimestamp: "2020-08-30T10:11:38Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:tls.crt: {}
        f:tls.key: {}
      f:type: {}
    manager: kubectl
    operation: Update
    time: "2020-08-30T10:11:38Z"
  name: nginx-ssl
  namespace: default
  resourceVersion: "6482359"
  selfLink: /api/v1/namespaces/default/secrets/nginx-ssl
  uid: ecbbe79b-1c68-4bb1-8e58-3388e83ba8fe
type: kubernetes.io/tls

三、清单式创建Secret资源
  Secret资源是标准的Kubernetes API对象,除了标准的apiVersion、kind和metadata字段外,它可用的其他字段具体如下:
  data<map[string]string>:"key:value"格式的数据,通常是敏感信息,数据格式需要是以Base64格式编码的字符串,因此需要用户事先完成编码。
  stringData<map[string]string>:以明文格式(非Base64编码)定义的"key:value"数据;无须用户事先对数据进行Base64编码,而是在创建为Secret对象时自动进行编码保存于data字段中;stringData字段中的明文不会被API Server输出,不过若是使用"kubectl apply"命令进行创建,那么注解信息中还是可能会直接输出这些信息的。
  type<string>:仅是为了便于编程方式处理Secret数据而提供的类型标识

1)编写创建Secret资源的yaml文件

]# cat secret-demo.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: secret-demo
stringData:
  username: redis
  password: redis123
type: Opaque

]# kubectl apply -f  secret-demo.yaml 
secret/secret-demo created

2)查看Secret资源详细信息

]# kubectl get secret -o wide 
NAME                  TYPE                                  DATA   AGE
secret-demo           Opaque                                2      8s

]# kubectl get secret secret-demo -o yaml
apiVersion: v1
data:
  password: cmVkaXMxMjM=
  username: cmVkaXM=
kind: Secret
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Secret","metadata":{"annotations":{},"name":"secret-demo","namespace":"default"},"stringData":{"password":"redis123","username":"redis"},"type":"Opaque"}
  creationTimestamp: "2020-08-30T10:21:05Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:password: {}
        f:username: {}
      f:metadata:
        f:annotations:
          .: {}
          f:kubectl.kubernetes.io/last-applied-configuration: {}
      f:type: {}
    manager: kubectl
    operation: Update
    time: "2020-08-30T10:21:05Z"
  name: secret-demo
  namespace: default
  resourceVersion: "6483976"
  selfLink: /api/v1/namespaces/default/secrets/secret-demo
  uid: b9514dfe-08f5-4cce-935b-24fd94cb7bf9
type: Opaque

四、Secret存储卷
  类似于Pod消费ConfigMap对象的方式,Secret对象可以注入为环境变量,也可以存储为卷形式挂载使用。不过,容器应用通常会在发生错误时将所有环境变量保存于日志信息中,甚至有些应用在启动时即会将运行环境打印到日志中;另外,容器应用调用第三方程序为子进程时,这些子进程能够继承父进程的所有环境变量。有鉴于此,使用环境变量引用Secret对象中的敏感信息实在算不上明智之举。
  在Pod中使用Secret存储卷的方式,除了其类型及引用标签要替换为Secret及secretName之外,几乎类似于ConfigMap存储卷,包括支持使用挂载整个存储卷、只挂载存储卷中指定的键值以及独立挂载存储卷中的键等使用访问。例如,下面通过一个实例来将之前创建的nginx-ssl资源挂载到一个Pod中,实现SSL加密访问。

1)编写Pod资源的yaml文件

]# cat nginx-ssl.yaml 
apiVersion: v1
kind: Service
metadata:
  name: svc-nodeport
spec:
  type: NodePort
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 32222
--- 
apiVersion: v1
kind: Pod
metadata: 
  name: secret-volume-demo
  namespace: default
  labels:
    app: myapp
spec:
  containers:
  - name: web-server
    image: nginx:alpine
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: nginxcert
      mountPath: /etc/nginx/ssl/
      readOnly: true
  volumes:
  - name: nginxcert
    secret:
      secretName: nginx-ssl

]# kubectl apply -f svc-nodeport.yaml 
service/svc-nodeport created
pod/secret-volume-demo created

2)查看Pod资源信息

]# kubectl get pods -o wide 
NAME                    READY   STATUS    RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
secret-volume-demo      1/1     Running   0          7s    10.244.1.125   node1   <none>           <none>

]# kubectl get svc 
NAME           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
svc-nodeport   NodePort    10.107.183.226   <none>        80:32222/TCP   14s

3)查看Secret资源是否已经挂载

]# kubectl exec -it secret-volume-demo -- ls /etc/nginx/ssl/
tls.crt  tls.key
新手也能搞定的ANPC三电平逆变器Simulink仿真:从SPWM调制到开关损耗优化 本文详细介绍了如何在Simulink中搭建ANPC三电平逆变器仿真模型,从SPWM调制基础到开关损耗优化技巧。通过分层设计思路和实用代码示例,帮助新手快速掌握ANPC拓扑的核心功能,包括中点平衡控制和性能指标分析,为电力电子系统设计提供实践指导。 阅读详情

相关推荐

WS2812B非标准通信协议:手把手实现精准时序控制

详解WS2812B的精准时序实现原理,剖析其非标准通信协议的关键细节。通过实际操作指导,帮助开发者稳定驱动ws2812b灯带,解决常见时序偏差问题,提升项目显示效果与响应一致性。

weixin_42584586的博客 587

Kubernetes中Secret使用详解

Secret解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。 Secret类型 Secret有三种类型: Opaque:base64编码格式的Secret,用来存储密码、密钥等;但数据也通过base64 –decode解码得到原始数据,所有加密性很弱。 kubernetes.io/doc...

1万+

Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件

Polyworks脚本开发学习笔记(十五)-利用Python连接Polyworks的COM组件

qq_43662503的博客 2503

Kubernetes之secrets使用

​ Secret解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。 ​

Harry的博客 4644

多边形裁剪算法

多边形裁剪算法 刚参加工作就跟多边形刚上了,对于多边形的裁剪做一些简单的总结。 多边形裁剪主要有四种算法 Greiner-Hormann裁剪算法 Sutherland-Hodgman算法 Vatti裁剪算法 Weiler-Atherton裁剪算法 作为一名想要成为优秀算法工程师的程序员,我们不能只会使用,而不知道其原理,倘若如此,我们无法做到应用于本身业务上的定制化的修改。 Greiner–H...

papalqi 6729

算法设计与分析 0-1背包问题 动态规划解法【超详细】

0-1背包问题 问题描述 给定i个物品和一个容量为的背包,物品的重量是Wi,其价值为Vi 物品个数为i,背包容量为C。 如何选择装入背包内的物品,使得装入背包中的物品的总价值最大? 其中,每种物品只有全部装入背包或不装入背包两种选择。 物品不能分割,不能重复使用。 动态规划算法思路 首先建立一个数组B[i][c],最上面一行表示背包容量,最左边一列表示物品编号,中间填充的数值表示当当前背包容量为C...

寒泉 4万+

Kubernetes 之 Secret 详解

在微服务和容器化环境中,敏感数据的管理是一个重要且挑战性的问题。Kubernetes 的 Secret 对象提供了一种在集群中安全地存储和管理敏感数据(如密码、密钥、证书等)的机制。Kubernetes 中的 Secret 是管理敏感数据的有效工具。通过正确地使用和保护 Secret,可以确保敏感数据在 Kubernetes 环境中的安全性。理解和熟练使用 Secret 对于维护一个安全且高效的 Kubernetes 集群至关重要。

升仔聊编程的博客 853

从零到一:Livox Mid-360 激光雷达的硬件集成与避坑实战

本文详细介绍了Livox Mid-360激光雷达的硬件集成全流程,包括硬件准备、网络配置、驱动编译和常见问题解决方案。通过实战经验,帮助开发者高效完成从设备拆箱到数据输出的完整链路,避免在IP设置、驱动编译和固件兼容性等环节踩坑。

salt的博客 1030

kubernetes secret 管理

Secret 概览 Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象。 这样的信息可能会被放在 Pod 规约中或者镜像中。 用户可以创建 Secret,同时系统也创建了一些 Secret。 要使用 Secret,Pod 需要引用 Secret。 Pod 可以用三种方式之一来使用 Secret: 作为挂载到一个或多个容器上的 卷 中的文件。 作为容器的环境变量 由 kubelet 在为 Pod 拉取镜像时使用 使用 kubectl 创建 Secret # 创建本例中要使用的文件 echo -

爱死亡机器人 5680

080、多轴运动控制:插补器设计(螺旋线插补)

本文分享了螺旋线插补器设计的实战经验。针对五轴点胶机Z轴抖动问题,作者分析了螺旋线数学本质,提出基于归一化时间参数的速度规划方法,强调各轴严格同步的重要性。文章详细介绍了速度分解、加减速处理、嵌入式优化技巧(查表法、定点化),并总结了起点闭合、速度波动、数值处理等常见问题解决方案。最后给出5条实用建议:注重速度规划而非纯数学推导、预先仿真、保留调试接口、考虑机械谐振、防范编码器丢脉冲。通过优化插补周期、电子齿轮比和S形速度曲线,成功将设备良率从60%提升至95%。

m0_50546716的博客 86

手把手教你学PCIE(9.3)--pcie常见故障及原因:配置错误介绍

PCIe 设备的配置错误可能涉及操作系统设置、BIOS 设置、驱动程序设置和配置文件设置等多个方面。通过以上方法,可以有效地诊断和解决 PCIe 设备的配置错误。

MHD0815的博客 2439

kubernetes中secret介绍

Kubernetes 中的是一种用于存储敏感信息(如密码、令牌、密钥等)的资源对象。与直接将敏感信息写入 Pod 的配置文件中相比,Secret 提供了一种更加安全和灵活的方式来管理这些信息。用于存储应用程序需要的敏感信息,例如数据库密码、API 密钥、TLS 证书等。避免将敏感信息硬编码在 Pod 的定义中。可以限制 Secret 的访问权限(结合 RBAC 使用)。如果 Secret 被更新,挂载到 Pod 的数据也可以动态更新(适用于挂载为文件的情况)。

zhangshenglu1的博客 1447

【产品】 产品设计:如何解决铝合金氧化着色后表面硬度低的问题(硬质氧化)

1、氧化处理技术 1)化学氧化 化学氧化处理所获得的膜层较薄,一般厚度为0.5μm ~4μm,质软不耐磨,抗蚀能力低于阳极氧化膜。 一般不宜单独便用,由于化学氧化膜吸附能力好,主要作用于油漆的底层,化学氧化按其溶液性可分为碱性和酸性两种。按其膜层性质可分为氧化膜,磷酸盐膜、铬酸盐膜及磷酸一铬酸盐膜等(这类型的氧化膜是可导电)。 2)电化学氧化(阳极氧化) 电化学氧化(俗称阳极氧化)是铝及...

产品线负责人 9733

k8s学习-Secret(创建、使用、更新、删除等)_kubectl delete secret

任何拥有 API 访问权限的人都可以检索或修改 Secret,任何有权访问 etcd 的人也可以。此外,任何有权限在命名空间中创建 Pod 的人都可以使用该访问权限读取该命名空间中的任何 Secret;对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!中的安全部分详细展开。

2401_87034442的博客 1306

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

kubernetes(k8s) 学习 (九) k8s存储之 Secret ( 简介+两种使用方式)

文章目录Secret简介secret的创建作为存储卷注入到pod上,由容器应用程序所使用用文件创建编写一个 secret 对象将secret挂载在volume中向指定路径映射 secret 密钥将Secret设置为环境变量kubernetes.io/dockerconfigjson用于存储docker registry的认证信息. Secret简介 Secret资源的功能类似于ConfigMap,...

weixin_45649763的博客 2328

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【Kubernetes学习之连接集群】利用 kubeconfig 或 secret Token 连接 k8s 集群

serviceaccount的权限由集群中对应的rolebinding决定,官方文档:

叮当猫的喵i 1994

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

k8s学习-Secret(创建、使用、更新、删除等)_kubectl delete secret(3)

使用该 ServiceAccount 创建的任何 Pod 和默认使用该 ServiceAccount 的 Pod 将会将其的 imagePullSecret 字段设置为服务帐户的 imagePullSecret 值。imagePullSecrets 字段中包含一个列表,列举对同一名字空间中的 Secret 的引用。手动创建的 Secret(例如包含用于访问 GitHub 帐户令牌的 Secret)可以根据其服务帐户自动附加到 Pod。可以看到默认密钥名称是文件名,值是base64编码的。

2401_84545016的博客 1277

k8s学习(十二) 使用secret

ConfigMap是用来存储一些非安全的配置信息,如果涉及到一些安全相关的数据的话用ConfigMap就非常不妥了, 因为ConfigMap明文存储的,这个时候使用Secret,Secret用来保存敏感信息,例如密码、OAuth 令牌和 ssh key等等, 将这些信息放在Secret中比放在Pod的定义中或者docker镜像中来说更加安全和灵活。 Secret有三种类型: Opaque:bas...

文若书生的专栏 5535

K8s(Kubernetes)学习(七)——k8s持久化存储:emptyDir、local、nfs、PV&&PVC静态供给&动态供给、configMap、secret

在 Kubernetes 中,ConfigMap 是一种用于存储非敏感信息的 Kubernetes 对象。它用于存储配置数据,如键值对、整个配置文件或 JSON 数据等。ConfigMap 通常用于容器镜像中的配置文件、命令行参数和环境变量等。环境变量注入:将配置数据注入到 Pod 中的容器环境变量中。配置文件注入:将配置数据注入到 Pod 中的容器文件系统中,容器可以读取这些文件。命令行参数注入:将配置数据注入到容器的命令行参数中。基本操作。

Pistachiout的学习博客 876

k8s学习(十五)Secret的使用

目录前言一、创建Secret二、使用Secret 前言 。 一、创建Secret 1、base64加密 [root@k8s-master k8s]# echo -n "root" | base64 cm9vdA== [root@k8s-master k8s]# echo -n "root123" | base64 cm9vdDEyMw== 2、secret.yaml [root@k8s-master k8s]# cat secret.yaml apiVersion: v1 kind: Secr..

码易的博客 2131

k8s学习-Secret(创建、使用、更新、删除等)

注意:Base64只是一种编码,不含密钥的,并不安全。任何拥有 API 访问权限的人都可以检索或修改 Secret,任何有权访问 etcd 的人也可以。此外,任何有权限在命名空间中创建 Pod 的人都可以使用该访问权限读取该命名空间中的任何 Secret;使用该 ServiceAccount 创建的任何 Pod 和默认使用该 ServiceAccount 的 Pod 将会将其的 imagePullSecret 字段设置为服务帐户的 imagePullSecret 值。中的安全部分详细展开。

关注网络安全、云原生安全 1万+

Kubernetes 学习13 kubernetes pv pvc configmap 和secret

一、概述   1、我们在pvc申请的时候未必就有现成的pv能正好符合这个pvc在申请中指定的条件,毕竟上一次的成功是我们有意设定了有一些满足有一些不满足的前提下我们成功创建了一个pvc并且被pod绑定所使用了。但是正常情况下刚好让二者之间符合或者在一众pv中正好有存在符合需要的这么一个pv未必在多种情况下都能满足。所以k8s的设计者也注意到了这些问题,因此他们为此有意设计了一种工作逻辑能够让pv...

weixin_34380781的博客 386

kubernetes Secret 使用方法,个人学习记录

kubernetes Secret Secret 有三种类型:Service Account(SA)Opaque SecretⅠ、创建说明Ⅱ、使用方法1、将定义好的 Secret 挂载到 Volume 数据卷中2、将 Secret 导出到环境变量中kubernetes.io/dockerconfigjson 私有仓库认证 ​ secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Sepc 中。 Secret 可以以 Volume 或者环境变量的方式使用

北海牧野 746

K8S学习之基础二十九:K8S中的secret

k8s中的secret

云上艺旅的博客 1020

k8s学习--Secret详细解释与应用

类似与ConfigMap 区别在于ConfigMap存储明文Secret存储密文ConfigMap可以用作配置文件管理,Secret用于密码、密钥、token等敏感数据配置管理##Secret特性1非敏感数据:专门用于存储非敏感的配置信息。2.多种数据源:数据可以从命令行、文件、目录等多种来源创建。3.动态更新:更新 ConfigMap 后,Pod 可以动态加载新的配置信息(需要应用支持热加载)

lwxvgdv的博客 1738
上一篇: Kubernetes学习之ConfigMap
下一篇: Kubernetes学习之StatefulSet控制器
Micky_Yang
博客等级 码龄8年 58粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值