本节主要包含的内容是Registry。
Registry: 也就是集成在OpenShift内的一个容器私有仓库,用来存放打包后制作的镜像。
部署Registry
在用Ansible搭建平台的时候,已经在infra节点上自动部署了Registry Pod,如果是通过其它的部署方式部署Okd,可能需要手动的部署这个。
访问Registry
通过oc命令或者kubectl命令可以看到Registry服务的ip

如何直接访问到这个Registry,文档上是这么描述的
For any direct access, you must have a regular user for your preferred identity provider. A regular user can generate an access token required for logging in to the registry. System users, such as system:admin, cannot obtain access tokens and, therefore, cannot access the registry directly.
我的平台是使用的 HTPASSWD authentication
创建用户
1 | htpasswd /etc/origin/openshift-htpasswd <user_name> |
为这个用户绑定registry读写角色
1 | oc policy add-role-to-user registry-viewer <user_name> |
使用创建的账户进行登录到Okd
1 | oc login |
登录到Registry
1 | docker login -u openshift -p $(oc whoami -t) <registry_ip>:<port> |
需要注意的是,一旦使用这个账号登录到Okd之后,后面所有的命令操作都是以该用户的身份操作,会出现很多命令无权限,再次获得系统管理员身份使用
1 | oc login -u system:admin |
如果docker login成功之后,可以测试一下镜像的push&pull。
在折腾Registry的过程中,并不是很顺利,遇到的问题后面再详细描述。
安全与暴露
安全
原本我以为通过Ansible安装的Registry不支持Https的,所欲按照文档操作手动配置证书的过程中,发现这部分已经在平台搭建的时候安装好了,所以做了一些无用功
当然可能也还有一点用,就是自带的Https看起来没有提供对Ip的直接登录,手动创建证书时,把ip也带上了,所以后面能通过ip:port直接登录到Registry。
配置细节略过,看文档,非常详细。
暴露
其实就是添加了一个路由,比较简单,略过
扩展配置
这一部分有一个重点就是镜像文件的存储,默认是用的FileSystem,但在实际生产中,往往会使用其他的存储方案,这一部分后面再研究。
遇到的问题
docker无法登录到registry
问题描述
无法通过
docker login到registry,提示TLS handshake timeout问题分析
由于我使用的是OpenStack虚拟的云主机构建的这个平台,按照以前操作k8s和容器的经验,估计这个和mtu值有关,因为一般的Linux操作系统默认的MTU值是1500,而Openstack云主机mtu值是1450。
解决方法
网上各种搜,各种尝试,解决问题的过程很不爽,最终运气不错,在这里找到了问题的解决方法。
修改
1
2
3
4
5
6# cat /etc/origin/node/node-config.yaml
...
networkConfig:
mtu: 1450
networkPluginName: company/openshift-ovs-subnet
...修改mtu到1400
重启
1
systemctl restart origin-node.service
重启之后

观察Node节点tun0mtu并没有变化,这算不算一个bug,算了,这样至少问题解决了
对于SDN网络这一块,还不太懂,后面再研究。
Optimizing Network Performance
补充
通过修改系统内文件的配置,发现修改不能生效,继续解决
原来这部分配置已经集成到ConfigMap中了,通过编辑ConfigMap,改完后重启所有节点,ok
1
2
3oc get cm -n openshift-node
//修改所有的
oc edit cm node-config-compute -n openshift-node
