云原生|kubernetes|关于secret的一些使用(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 云原生|kubernetes|关于secret的一些使用

热更新secret:

更改上面的secret清单文件,增加一个password5,然后apply secret文件,此时nginx这个pod不需要更新就可以看到多出一个password5文件

[root@k8s-master wd]# cat test-secret.yaml 
apiVersion: v1
data:
  password1: TXlQQHNzMTIz
  password2: MTIzNDU2
  password3: NDU2Nzg5
stringData:
  password4: qwerty
  password5: 324dfe3432423
kind: Secret
metadata:
  name: mysql-root-password
#更改secret文件
[root@k8s-master wd]# k apply -f test-secret.yaml 
secret/mysql-root-password configured
root@nginx-85cf9f64ff-tljmd:/# ls -al /opt/
total 0
drwxrwxrwt 3 root root 180 Oct  7 12:36 .
drwxr-xr-x 1 root root  51 Oct  7 10:16 ..
drwxr-xr-x 2 root root 140 Oct  7 12:36 ..2022_10_07_12_36_50.416957405
lrwxrwxrwx 1 root root  31 Oct  7 12:36 ..data -> ..2022_10_07_12_36_50.416957405
lrwxrwxrwx 1 root root  16 Oct  7 10:16 password1 -> ..data/password1
lrwxrwxrwx 1 root root  16 Oct  7 10:16 password2 -> ..data/password2
lrwxrwxrwx 1 root root  16 Oct  7 10:16 password3 -> ..data/password3
lrwxrwxrwx 1 root root  16 Oct  7 12:00 password4 -> ..data/password4
lrwxrwxrwx 1 root root  16 Oct  7 12:36 password5 -> ..data/password5

2)env环境变量形式挂载


修改上面的那个nginx部署清单文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.20
        name: nginx
        env:
        - name: PASSWORD1
          valueFrom:
            secretKeyRef:
              name: mysql-root-password
              key: password1
        - name: PASSWORD5
          valueFrom:
            secretKeyRef:
              name: mysql-root-password
              key: password5

此时,重新应用这个部署文件后,pod的名称会发生改变,因此,重新查询出此pod的名字,并进入pod打印变量password1的值:

[root@k8s-master wd]# k get po
NAME                    READY   STATUS    RESTARTS   AGE
nginx-5cd897998-rm4kv   1/1     Running   0          87s
[root@k8s-master wd]# k exec -it nginx-5cd897998-rm4kv -- /bin/bash
root@nginx-5cd897998-rm4kv:/# echo $PASSWORD1
MyP@ss123

OK,可以看到环境变量在pod内生效了,打印出了正确的值,那么,stringDate能否正确打印呢,答案是肯定的,但,此时secret不能热更新了,也就是说环境变量形式的引用secret,secret改变不会自动将它的值作为变量映射到pod内。

[root@k8s-master wd]# k exec -it nginx-cb84ddc9-lvz4k -- /bin/bash
root@nginx-cb84ddc9-lvz4k:/# echo $PASSWORD5
324dfe3432423

3)docker私有仓库的专有secret引用


第一种方式:

假设本地的docker仓库已经安装完毕并调试好了,不管是habore还是官方镜像搭建的私人仓库都有配置文件,此文件假定名字是config.json

[root@ip-172-31-10-110 ~]# base64 -w 0 ~/.docker/config.json
ewoJImF1dGhjNWdlpHVnVaenB5Wld4aFFFeFdUa2xCVGtBeU1ERTMiCgkJfSwKCQkidXJlZy5rOHMueXVud2VpLnJlbGEubWUiOiB7CgkJCSJhdXRoIjogIloyRnZaM1Z2WkdWdVp6cHlaV3hoUUV4V1RrbEJUa0F5TURFMyIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTguMDYuMS1jZSAobGludXgpIgoJfQp9

创建secret:

### vim secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: regsecret
  namespace: default
data:
    .dockerconfigjson: ewoJImF1dGhjNWdlpHVnVaenB5Wld4aFFFeFdUa2xCVGtBeU1ERTMiCgkJfSwKCQkidXJlZy5rOHMueXVud2VpLnJlbGEubWUiOiB7CgkJCSJhdXRoIjogIloyRnZaM1Z2WkdWdVp6cHlaV3hoUUV4V1RrbEJUa0F5TURFMyIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTguMDYuMS1jZSAobGludXgpIgoJfQp9
type: kubernetes.io/dockerconfigjson

pod 拉取镜像的时候引用此secret:

[root@ip-172-31-10-110 ~]#  vim test.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: dentestreplce
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: dentestreplace
    spec:
      containers:
      - name: dentestreplace 
        imagePullPolicy: Always
        image: ureg.k8s.test.com/rela_dev/logreport:latest
      imagePullSecrets:
      - name: regsecret

第二种方式:

使用命令创建Secret

 

kubectl create secret docker-registry regsecret --docker-server=ureg.k8s.test.com --docker-username=lvnian --docker-password=LVNIAN@2017 --docker-email=lvnian@rela.me 
regsecret: 指定密钥的键名称, 可自行定义
--docker-server: 指定docker仓库地址
--docker-username: 指定docker仓库账号
--docker-password: 指定docker仓库密码
--docker-email: 指定邮件地址
-n : 命名空间,在那个命名空间创建,就只能在那个命名空间使用这个secret

命令行生成的secret和上面文件生成的secret引用都是一样的,没什么可说的了。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1天前
|
运维 Kubernetes Cloud Native
构建高效云原生运维体系:Kubernetes最佳实践
【5月更文挑战第9天】 在动态和快速演变的云计算环境中,高效的运维是确保应用稳定性与性能的关键。本文将深入探讨在Kubernetes环境下,如何通过一系列最佳实践来构建一个高效且响应灵敏的云原生运维体系。文章不仅涵盖了容器化技术的选择与优化、自动化部署、持续集成/持续交付(CI/CD)流程的整合,还讨论了监控、日志管理以及灾难恢复策略的重要性。这些实践旨在帮助运维团队有效应对微服务架构下的复杂性,确保系统可靠性及业务的连续性。
|
1天前
|
Kubernetes Cloud Native 持续交付
构建高效稳定的云原生应用:容器编排与微服务治理实践
【5月更文挑战第14天】 随着企业数字化转型的深入,云原生技术以其弹性、敏捷和可扩展的特性成为现代应用开发的首选模式。本文将探讨如何通过容器编排工具如Kubernetes以及微服务架构的有效治理,构建和维护高效且稳定的云原生应用。我们将分析容器化技术的优势,并结合案例讨论在多云环境下实现持续集成、持续部署(CI/CD)的最佳实践,同时解决微服务带来的分布式复杂性问题。通过本文的阐述,读者将获得一套提升系统可靠性和业务连续性的策略框架。
7 0
|
1天前
|
Kubernetes Cloud Native 持续交付
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
【5月更文挑战第7天】本文探讨了Docker和Kubernetes如何协同构建和管理云原生应用。Docker提供容器化技术,Kubernetes则负责容器的部署和管理。两者结合实现快速部署、自动扩展和高可用性。通过编写Dockerfile创建镜像,然后在Kubernetes中定义部署和服务进行应用暴露。实战部分展示了如何部署简单Web应用,包括编写Dockerfile、构建镜像、创建Kubernetes部署配置以及暴露服务。Kubernetes还具备自动扩展、滚动更新和健康检查等高级特性,为云原生应用管理提供全面支持。
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
|
1天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:Kubernetes与微服务架构的融合
【5月更文挑战第6天】 在数字化转型的浪潮中,企业正迅速采纳云原生技术以实现敏捷性、可扩展性和弹性。本文深入探讨了如何利用Kubernetes这一领先的容器编排平台,结合微服务架构,构建和维护高效、可伸缩的云原生应用。通过分析现代软件设计原则和最佳实践,我们提出了一个综合指南,旨在帮助开发者和系统架构师优化云资源配置,提高部署流程的自动化水平,并确保系统的高可用性。
32 1
|
1天前
|
Kubernetes Cloud Native Go
Golang深入浅出之-Go语言中的云原生开发:Kubernetes与Docker
【5月更文挑战第5天】本文探讨了Go语言在云原生开发中的应用,特别是在Kubernetes和Docker中的使用。Docker利用Go语言的性能和跨平台能力编写Dockerfile和构建镜像。Kubernetes,主要由Go语言编写,提供了方便的客户端库与集群交互。文章列举了Dockerfile编写、Kubernetes资源定义和服务发现的常见问题及解决方案,并给出了Go语言构建Docker镜像和与Kubernetes交互的代码示例。通过掌握这些技巧,开发者能更高效地进行云原生应用开发。
54 1
|
1天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:以Kubernetes为核心
【4月更文挑战第27天】 在当今数字化转型的浪潮中,企业急需构建灵活、可扩展的应用来应对不断变化的市场需求。云原生技术以其独特的优势应运而生,成为推动现代应用开发和部署的重要力量。本文深入探讨了云原生的核心组件之一——Kubernetes,解析其如何通过容器编排优化资源利用,提高应用的弹性和可维护性。同时,文章将展示如何在云平台上实现高效的服务发现、自动扩缩容以及持续集成和持续部署(CI/CD),进一步阐述云原生架构下的最佳实践和面临的挑战。
|
1天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
25 4
|
JSON Kubernetes NoSQL
Kubernetes(六) - Secret和私有仓库认证
对一个公司来说安全也是最为重要的因为可能一旦出现安全问题可能这个公司就完了,所以对密码管理是一个长久不变的话题,Kubernetes对密码管理提供了Secret组件进行管理,最终映射成环境变量,文件等方式提供使用,统一进行了管理更换方便,并且开发人员并不需要关心密码降低了密码的受众范围从而保障了安全.
272 0
|
Kubernetes NoSQL 数据安全/隐私保护
Kubernetes(六) - Secret和私有仓库认证
对一个公司来说安全也是最为重要的因为可能一旦出现安全问题可能这个公司就完了,所以对密码管理是一个长久不变的话题,Kubernetes对密码管理提供了Secret组件进行管理,最终映射成环境变量,文件等方式提供使用,统一进行了管理更换方便,并且开发人员并不需要关心密码降低了密码的受众范围从而保障了安全.
1370 0
|
1天前
|
Kubernetes 应用服务中间件 Docker
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件