k8s-secret 配置使用secret

帅博简
2023-12-01

secret的使用方法

secret的使用方式和configmap很像,secret使用加密的方式更加安全,configmap更适合传递配置文件。

secret的类型

◆Opaque:通用型Secret,默认类型;
◆ kubernetes.io/service-account-token:作用于ServiceAccount,包含一个令牌,用于标识API服务账户;
◆ kubernetes.io/dockerconfigjson:下载私有仓库镜像使用的Secret,
和宿主机的/root/.docker/config.json一致,宿主机登录后即可产生该文件;
◆ kubernetes.io/basic-auth:用于使用基本认证(账号密码)的Secret,可以使用Opaque取代;
◆ kubernetes.io/ssh-auth:用于存储ssh密钥的Secret;
◆ kubernetes.io/tls:用于存储HTTPS域名证书文件的Secret,可以被Ingress使用;
◆ bootstrap.kubernetes.io/token:一种简单的 bearer token,
用于创建新集群或将新节点添加到现有集群,在集群安装时可用于自动颁发集群的证书。

创建secret

使用命令的方式创建,从文件来生成参数

用文件创建secret,两个文件一个创建用户名一个创建密码。

echo -n "admin" > user.txt #创建文件user写入值admin
echo -n "Huawei@123" > password.txt #创建文件password.txt写入值Huawei@123
kubelet create secret generic secret-name --from-file=user.txt --from-file=password.txt
# generic secret的类型
kubelet describe secret  secret-name #查看secret
Name:         db-user-pass
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password.txt:  10 bytes
user.txt:      5 bytes                  

用文件创建secret,一个文件中同时创建用户名密码

cat 1.txt
user=admin
password=123qer
kubectl create secret generic secret-pass2 --from-env-file=1.txt 
使用yaml创建secret文件
echo -n "admin" | base64 #生成用户名和密码的base64的加密,应为secret是使用base64加密的。
echo -n “Huawai@123” | base64
cat secret.yaml # 使用加密过的数值创建
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
data:
  user: YWRtaW4=
  password: SHVhd2VpQDEyMw==
kubectl describe secret mysecret #查看详细信息
Name:         mysecret
Namespace:    default
Labels:       <none>
Annotations:  
Type:         Opaque
Data
====
password:  10 bytes
user:      5 bytes

在pod中使用secret

使用mount挂载到pod中,这样会生成以键命名的文件,内容是value的值。

#使用volume挂载
apiVersion: v1
kind: Pod
metadata:
  name: secretpod
spec:
  containers:
  - name: secretpod-test
    image: busybox
    args: ["/bin/sh","-c","sleep 3000"]
    volumeMounts:
    - name: mysecrettest
      mountPath: "/etc/config"
      readOnly: true
  volumes:
  - name: mysecrettest
    secret:
      secretName: mysecret

使用env生成环境变量

#使用env应用secret
apiVersion: v1
kind: Pod
metadata:
  name: envsecretpod
spec:
  containers:
  - name: envsecretpodd
    image: busybox
    args: ["/bin/sh","-c","sleep 3000"]
    env:
      - name: PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password
      - name: USER
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: user
#使用envFrom引用secret
apiVersion: v1
kind: Pod
metadata:
  name: secretenvfrom
spec:
  containers:
  - name: secretenvfrom
    image: nginx
    envFrom:
    - secretRef:
        name: my-secret

在拉取私有镜像仓库镜像时,使用secret

用secret来存储私有镜像仓库的用户名密码及地址
创建方法:

kubectl create secret docker-registry myregistrykey \
#secret的类型 
--docker-server=DOCKER_REGISTRY_SERVER \ #仓库地址
--docker-username=DOCKER_USER \   #用户名
--docker-password=DOCKER_PASSWORD \ #密码
--docker-email=DOCKER_EMAIL #email

如何使用,在pod内增加字段如下:

spec:
imagePullSecrets:
- name: myregistry
containers:

使用HTTPS域名证书

用secret来存储域名证书
创建secret

kubectl -n default create secret tls nginx-test-tls --key=tls.key --cert=tls.crt

在pod内使用

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: nginx-https-test
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: https-test.com
  http:
    paths:
    - backend:
        serviceName: nginx-svc
        servicePort: 80
  tls: #增加tls字段
  - secretName: nginx-test-tls
 类似资料: