Centos安装docker以及ServiceAccount
一、Centos安装docker
1、使用官方安装脚本自动安装
安装命令如下:
1 |
|
也可以使用国内 daocloud 一键安装命令:
1 |
|
2、Docker 镜像加速
国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
- 网易:https://hub-mirror.c.163.com/
- 阿里云:https://<你的ID>.mirror.aliyuncs.com
- 七牛云加速器:https://reg-mirror.qiniu.com
2.1、Ubuntu16.04+、Debian8+、CentOS7
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):
1 |
|
之后重新启动服务:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
3、Docker开机自启动
如果不设置成开机自启动,那么每一次开启机器都需要手动start,因此我们设置成开机自启动
1 |
|
然后我们可以检查docker的各种信息。使用命令:
1 |
|
4、出现的异常
4.1、docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.See ‘docker run --help’.
一、
因为,我忘记启动docker这个服务了。
1 |
|
二、
You need to add user into docker group. by ’ sudo gpasswd-a xxxx docker’(xxx is your user name)
Then restart your computer.
This problem should be solved.
docker默认只允许root用户连接,想用其他用户需要添加。
三
docker-machine restart&&eva"$(docker-machine env default)"&&docker-machine env
运行这么一串就好了。
4.2、docker 创建镜像时显示 Forbidden path outside the build context
因为目录不允许超过当前目录,那两个 … 超出了docker的根目录,所以报这个错了
解决办法是把dockerfile向上一个级目录,在上一级目录中进行操作。
二、相关知识
1、ServiceAccount 是什么
Service Account为Pod中的进程和外部用户提供身份信息。所有的kubernetes集群中账户分为两类,Kubernetes管理的serviceaccount(服务账户)和useraccount(用户账户)。
大家都知道api server的集群的入口,对于kunbernetes的api server 是肯定不能随便访问。所以我们必须需要一些认证信息。
例如:
当用户访问集群(例如使用kubectl
命令)时,apiserver 会将您认证为一个特定的 User Account(目前通常是admin
,除非您的系统管理员自定义了集群配置)。Pod 容器中的进程也可以与 apiserver 联系。 当它们在联系 apiserver 的时候,它们会被认证为一个特定的 Service Account。
因为kubernetes是高度模块化,所有认证方式和授权方式都可以通过插件的方式让客户自定义的,可以支持很多种。客户端请求的时候首先需要进行认证,认证通过后再进行授权检查,因有些操作需要级联到其他资源或者环境,但是级联环境是否有授权权限,这时候需要准入控制。
认证插件
- bearer token 当使用来自 http 客户端的 bearer token 时,API server 期望
Authorization
header 中包含Bearer token
的值。Bearer token 必须是一个字符串序列,只需使用 HTTP 的编码和引用功能就可以将其放入到 HTTP header 中。 - 客户端证书 客户端请求前需要,需要发送api server的办法的证书,由api server来确认是否他来签署的,引用的文件必须包含一个或多个证书颁发机构,用于验证提交给 API server 的客户端证书。如果客户端证书已提交并验证,则使用 subject 的 Common Name(CN)作为请求的用户名。反过来,api server也要验证客户端的证书,所有对于客户端也应该有一个证书,提供api server 验证,此过程是双向验证。
- HTTP BASE 认证: 通过用户名+密码方式认证。
当启用了多个认证模块时,第一个认证模块成功认证后将短路请求,不会进行第二个模块的认证。API server 不会保证认证的顺序。
用户账户需要哪些信息:
- user 保护UserName和UID,UserName是标识最终用户的字符串,UID是标识最终用户的字符串,比用户名更加一致切唯一。
- group 一组将用户和常规用户组相关联的字符串
- extra 包含其他有用认证信息的字符串列表
上述是来自集群外部的访问,我们可以理解成是User Account,是给kubernetes集群外部用户,例如(系统管理员、用户/租户等)。Service Account而是给运行在Pod的容器、或者Pod使用的身份认证。
正常情况下,为了确保kubernetes集群的安全性,Api Server 都会给客户端进行身份认证,但是Pod访问Kubernetes Api Server服务时,也是需要身份认证的。如下图:
我们在每一个namespace下看到都有一个secret,而我们看svc的时候,api server通过svc的访问访问的,他们的Endpoints是api server。
1 |
|
每个Namespace下都有一个名为default的默认的 Service Account对象,这个Service Account里面有一个名为Tokens的可以当作Volume一样被Mount到Pod里的secret,当Pod启动时候,这个Secret会自动Mount到Pod的指定目录下,用来完成Pod中的进程访问API server时的身份认证过程。下面可以看到
1 |
|
创建一个serviceaccount
1 |
|
这里我们看到Kubernetes集群会自动创建一个token的secert,并被jaxzhai这个serviceaccount引用。
设置非默认的 service account,只需要在 pod 的spec.serviceAccountName
字段中将name设置为您想要用的 service account 名字即可。
在 pod 创建之初 service account 就必须已经存在,否则创建将被拒绝。
您不能更新已创建的 pod 的 service account。
在pod中使用service account
1 |
|
参考链接:
https://www.runoob.com/docker/centos-docker-install.html
https://www.runoob.com/docker/docker-mirror-acceleration.html
https://segmentfault.com/q/1010000005040763
https://www.zhihu.com/pub/reader/119632192/chapter/1150819665524715520
https://blog.csdn.net/weixin_30633405/article/details/99215173
https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/