k8s-secret 配置使用secret

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 #sercet的名称
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

设置configmap和secret不可更改

在configmap中加入immutable=true可以限制对configmap和secret的更改.

apiVersion: v1
data:
  nginx.conf: |2

    user  nginx;
    worker_processes  auto;

    error_log  /var/log/nginx/error.log notice;
    pid        /var/run/nginx.pid;


    events {
        worker_connections  512;
    }


    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;

        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

        access_log  /var/log/nginx/access.log  main;

        sendfile        on;

        keepalive_timeout  65;


        include /etc/nginx/conf.d/*.conf;
immutable: true #加入此参数可以设置configmap不能修改
kind: ConfigMap
metadata:
  creationTimestamp: "2024-02-23T08:34:10Z"
  name: nginx.conf
  namespace: default
  resourceVersion: "205391230"
  uid: 5323f420-cf45-42b5-b53c-3ed3f3b461e2
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值