Kubernetes(k8s)-Secret案例

71 阅读3分钟

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。

上一小节我们介绍了secret,实际上如果把他当成configmap来使用,他们在pod内是没有区别的,都是明文的。只是存储在k8s里面一个是明文一个是密文。今天我们将讲一个几乎在每个生产项目都会遇到的使用secret方法,和configmap不一样的应用方式。

我们在上一章docker-harbor部署指南的时候,介绍了如果是使用harbor,则仓库是默认带密码的,但是我们前面几个控制器里面的下载镜像,要么是本地有就不下载,如果没有则去下载,这个下载也是不需要登录的。如果使用harbor,则必须要登录,怎么解决这个需要登录的问题呢?

准备工作

我这里准备了一个harbor仓库,要求需要登录才能上传下载镜像,并且提前在node节点配置了允许下载http镜像,也就是配置了参数:"insecure-registries"。

[root@node01 ~]# docker pull 192.168.31.207/library/nginx
Using default tag: latest
Error response from daemon: unauthorized: unauthorized to access repository: library/nginx, action: pull: unauthorized to access repository: library/nginx, action: pul

开始配置

1.预先登录harbor

这里其实可以是任意节点,我们的目的是获取登录信息,只要不是在node节点即可,因为我们的pod默认调度都我们这个集群的node节点。

2.获取登录信息

[root@master01 ~]# cat /root/.docker/config.json 
{
	"auths": {
		"192.168.31.207": {
			"auth": "YWRtaW46SGFyYm9yMTIzNDU="
		}
	}
}[root@master01 ~]# 

3.生成secret

#如果用这个方式必须添加下面的type
kubectl create secret generic my-docker-secret \
  --from-file=.dockerconfigjson=/root/.docker/config.json \
  --type=kubernetes.io/dockerconfigjson

这里的类型也分很多种,上一小节创建的普通secret,类型是Opaque,今天创建的是专门用于下载镜像使用的。

4.pod使用

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: your-image-name
  imagePullSecrets:
 #   - name: my-secret
    - name: my-docker-secret

这里我故意是了错误的secret则下载失败,提示未认证。

使用正常的secret则可以看到下面的日志

Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  2m53s  default-scheduler  Successfully assigned default/my-pod to node01
  Normal  Pulling    2m53s  kubelet            Pulling image "192.168.31.207/library/nginx"
  Normal  Pulled     2m53s  kubelet            Successfully pulled image "192.168.31.207/library/nginx" in 49.727419ms
  Normal  Created    2m53s  kubelet            Created container my-container
  Normal  Started    2m53s  kubelet            Started container my-container

上面2个日志使用的下面的命令,由于我这里还没讲kubectl的命令,并且这个命令输出的内容会很多,截图也日志也不好发出来。

kubectl  describe pod my-pod
#就是查看这个pod的详细信息
#尤其是pod出错的时候非常有用

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。