zl程序教程

您现在的位置是:首页 >  后端

当前栏目

K8S 创建 Secret

k8s 创建 Secret
2023-09-14 09:16:40 时间

secret 用于存储和管理一些敏感数据,比如密码,token,密钥等敏感信息。它把 Pod 想要访问的加密数据存放到 Etcd 中。然后用户就可以通过在 Pod 的容器里挂载 Volume 的方式或者 环境变量 的方式访问到这些 Secret 里保存的信息

Secret 有三种类型

Opaque:base64 编码格式的 Secret,用来存储密码、密钥等;但数据也可以通过base64 –decode解码得到原始数据,所有加密性很弱。

Service Account:用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount 目录中。Service Account 对象的作用,就是 Kubernetes 系统内置的一种“服务账户”,它是 Kubernetes 进行权限分配的对象。比如,Service Account A,可以只被允许对 Kubernetes API 进行 GET 操作,而 Service Account B,则可以有 Kubernetes API 的所有操作权限

kubernetes.io/dockerconfigjson : 用来存储私有docker registry的认证信息

一、Opaque Secret 使用 

[root@node1 ~]# echo -n "admin" | base64
YWRtaW4=
[root@node1 ~]# echo -n "123456" | base64
MTIzNDU2
[root@node1 ~]# 

创建 secret

vim myapp-secret.yaml

# 内容
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: MTIzNDU2

将 secret 导到 环境变量

apiVersion: apps/v1
kind: Deployment
metadata:
 name: myapp-deploy
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: 192.168.26.160:86/xielong/myapp:v1.0
        ports:
        - containerPort: 80
        env:
        - name: MYSQL_SERVICE_USER
          valueFrom:
            secretKeyRef:
              name: mysecret
              key: username
        - name: MYSQL_SERVICE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysecret
              key: password

查看环境变量

[root@master1 yaml]# kubectl exec myapp-deploy-5df5dfbb7f-75qql env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=myapp-deploy-5df5dfbb7f-75qql

# 成功导入
MYSQL_SERVICE_USER=admin
MYSQL_SERVICE_PASSWORD=123456

KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
NGINX_VERSION=1.19.6
NJS_VERSION=0.5.0
PKG_RELEASE=1~buster
HOME=/root

  二、下面将演示 k8s 通过 secret 拉取 harbor 私有仓库

1、创建 secret

kubectl create secret docker-registry harbor-registry --docker-server=hub.mshxuyi.com \
--docker-username=tom.ma --docker-password=Tomma@123 --docker-email=tomma@qq.com

2、查看 secret

[root@master yaml]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
default-token-v9vdm   kubernetes.io/service-account-token   3      45d
harbor-registry       kubernetes.io/dockerconfigjson        1      26m

3、创建 pod

私有仓库安装 https://blog.csdn.net/mshxuyi/article/details/108217568

[root@master yaml]# vim create-secret.yaml

# 内容
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: hub.mshxuyi.com/xielong/nginx:v1
  imagePullSecrets:
  - name: harbor-registry

4、应用

kubectl apply -f create-secret.yaml

5、查看

[root@master yaml]# kubectl get pods -o wide
NAME       READY   STATUS    RESTARTS   AGE   IP            
nginx      1/1     Running   0          24m   10.244.1.38

6、访问

[root@master yaml]# curl 10.244.1.38
Welcome to nginx! | Vesion: v1