解决ansible mitogen 0.3.0+ 插件未渲染ansible_ssh_common_args模板变量问题

问题 使用ansible mitogen 0.3.4插件进行kubespray安装时,报错: EOF on stream; last 100 lines received:\nssh: Could not resolve hostname {%: Name or service not known 分析 经过debug分析,kubespray-default默认定义了如下变量模板:

但是通过ansible role去执行后,通过mitogen进行ssh并没有渲染出来变量:

可以看到,mitogen的ssh将ansible_ssh_common_args原封不动地输出来了 修改源码验证: 修改transport_config.py, 增加debug信息:

  下面是输出:

  可以看到ssh_common_args变量没有渲染 解决 将_task_vars.get(“vars”, {}) 改为 _task_vars.get(“hostvars”, {}), 从hostvars取值 搜索官方issures: https://github.com/mitogen-hq/mitogen/pull/956 commit ac34252bcccb60b50e6a8ed3a3b2f42d256d62e0 https://github.com/mitogen-hq/mitogen/pull/956/commits/ac34252bcccb60b50e6a8ed3a3b2f42d256d62e0 总结 Read more…

nginx反向代理Harbor/配置https

使用docker-compose安装harbor,配置ssl证书后使用nginx反向代理到harbor.配置后安装docker可以直接用域名登录harbor,无需配置私有仓库 nginx配置 1.修改harbor配置文件

2.nginx配置

  另: 创建证书脚本:

  问题: docker pull ycr.yyiuap.com/base/golang:alphine-node-3 Error response from daemon: received unexpected HTTP status: 503 Service Unavailable 解决: 去掉 http_proxy代理即可 参考:https://blog.csdn.net/oscarun/article/details/121395218   1、request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)错误: [root@iZrj9j76z8dlull9vqa4tqZ ~]# docker pull harbor.xxx.cn:443/1-1/mytomcat:8.5.52 Error response from Read more…

nginx问题解决

nginx转发post请求静态页面405 背景:用户支付成功后的回调是个静态页面。由于from表单连续提交是post方式,所以会报405 not allowed 错误。 常识:使用post方式请求js、html这样的静态文件一般的web服务器都会返回405 Method Not Allowed。因为默认情况下,nginx、apache、IIs等web服务无法响应静态页面的post请求,后端用来处理post请求,生产环境中不会有此问题(一般都不允许配置静态页面的post请求) 问题:为什么默认不支持静态页面post请求呢? 首先了解一下post请求方法,post请求一般用于提交表单或上传文件,post请求会导致新资源的建立或旧资源的更改。就安全方面来说(排除url地址的透明性),它对比get请求会有更改资源的情况,有些静态资源是不允许更改的,所以默认情况下web服务器上的静态资源都不允许发起post请求。 网上说的有很多种,重新编译nginx,设置正则匹配可以访问html文件类啊什么的,都不好用,而且基本都是你抄我我抄你,没有实际应用过。乱糟糟,最后本人用下面这种方式解决了问题。

  Nginx配置跨域请求 Access-Control-Allow-Origin * 当出现403跨域错误的时候 No ‘Access-Control-Allow-Origin’ header is present on the requested resource,需要给Nginx服务器配置响应的header参数: 一、 解决方案 只需要在Nginx的配置文件中配置以下参数:

二、 解释 1. Access-Control-Allow-Origin

2. Access-Control-Allow-Headers 是为了防止出现以下错误: Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response. 这个错误表示当前请求Content-Type的值不被支持。其实是我们发起了”application/json”的类型请求导致的。这里涉及到一个概念:预检请求(preflight request),请看下面”预检请求”的介绍。 3. Access-Control-Allow-Methods 是为了防止出现以下错误: Content-Type Read more…

如何精简Docker镜像

精简Docker镜像的五种通用方法 精简 Docker 镜像的好处很多,不仅可以节省存储空间和带宽,还能减少安全隐患。优化镜像大小的手段多种多样,因服务所使用的基础开发语言不同而有差异。本文将介绍精简 Docker 镜像的几种通用方法。 精简 Docker 镜像大小的必要性 Docker 镜像由很多镜像层(Layers)组成(最多 127 层),镜像层依赖于一系列的底层技术,比如文件系统(filesystems)、写时复制(copy-on-write)、联合挂载(union mounts)等技术,你可以查看Docker 社区文档以了解更多有关 Docker 存储驱动的内容,这里就不再赘述技术细节。总的来说,Dockerfile 中的每条指令都会创建一个镜像层,继而会增加整体镜像的尺寸。 下面是精简 Docker 镜像尺寸的好处: 减少构建时间 减少磁盘使用量 减少下载时间 因为包含文件少,攻击面减小,提高了安全性 提高部署速度 五点建议减小Docker镜像尺寸 一、优化基础镜像 优化基础镜像的方法就是选用合适的更小的基础镜像,常用的 Linux 系统镜像一般有 Ubuntu、CentOs、Alpine,其中 Alpine 更推荐使用。大小对比如下: Alpine 是一个高度精简又包含了基本工具的轻量级 Linux 发行版,基础镜像只有 4.41M,各开发语言和框架都有基于 Alpine 制作的基础镜像,强烈推荐使用它。 查看上面的镜像尺寸对比结果,你会发现最小的镜像也有 4.41M,那么有办法构建更小的镜像吗?答案是肯定的,例如 http://gcr.io/google_containers/pause-amd64:3.1 镜像仅有 742KB。为什么这个镜像能这么小?在为大家解密之前,再推荐两个基础镜像: 1、scratch 镜像 scratch 是一个空镜像,只能用于构建其他镜像,比如你要运行一个包含所有依赖的二进制文件,如Golang 程序,可以直接使用 scratch Read more…

gitlab pipeline 自动构建

使用gitlab pipeline自动构建,需要为项目配置runner, 安装方法为:

构建一个docker:buildx镜像做测试 .gitlab-ci.yml:

  Dockerfile:

  运行时提示Got permission denied while trying to connect to the Docker daemon socket,解决方法: 在runner服务器上修改gitlab-runner用户加入docker组:

 

harbor v2.5.1安装

使用docker-compose来安装harbor v2.5.1,安装过程中有一些问题,下面记录一下: 下载离线安装包:

2. 准备docker-compose.yml和harbor.yml: docker-compose.yml:

harbor.yml文件需要更改hostname, 监听port, 如果不开启ssl, 则注释掉https, 更改harbor_admin_password,和data_volume

  执行完docker-compose up -d后, 容器全部启来了, 但是再执行docker-compose down后, 再执行install.sh,或up启动,发现有几个问题: docker-compose up启动报错: Creating harbor-log … error ERROR: for harbor-log Cannot start service log: driver failed programming external connectivity on endpoint harbor-log (cb1338bb88ec65aba9727cb1e7656e6c44b3705095121e27ab9240a66cda1ef1): (iptables failed: iptables –wait -t filter Read more…

vscode配置代理

配置代理,让vscode和git飞起来 对于 git, 只需要用下面的明亮就可以了

  如果想要取消:

  但是如果是vscode,同样也是通过首选项->设置->搜索proxy,然后可以输入上面的proxy。速度就飞了。。 或者可以这样:

  当然,自备梯子

「Docker Buildx」- 构建“跨平台”镜像

使用Buildx 在x86架构centos上构建支持多架构镜像, 首先, 要确保内核大于4.0 升级内核版本

卸载旧内核

安装docker:

  开启特性: /etc/systemd/system/docker.service.d/docker-options.conf 中加入: –experimental=true \ 可以添加私有仓库的ssl证书到buildx容器内

  启动交叉编译: 方式1:

方式2 : 也可以安装qemu:

    如构建ntp构建: docker buildx build –platform linux/amd64,linux/arm64 -t chrony . 如果想将构建好的镜像保存在本地,可以将 type 指定为 docker,但必须分别为不同的 CPU 架构构建不同的镜像,不能合并成一个镜像,即: docker buildx build –platform linux/amd64,linux/amd64-t chrony -o type=docker . docker Read more…

通过ansible获取文件的几种方式

通过ansible获取文件的几种方式: 通过lookup读取ansible管理节点上的的内容, 并将其内容赋值给变量。如: 获取管理节点上的ssh key:

  fetch 模块的作用就是”Fetches a file from remote nodes,fetch为”拿来”之意,当我们需要将受管主机中的文件拉取到ansible主机时,则可以使用此模块,  可以从远端将文件拉取到本地, 如获取k8s master节点上的ca证书到本地:

  使用cat测试到变量 slurp 模块用于拉取远端文件的 base64 码, 可通过b64decode进行解码   任务: 获取etcd主机的ssl文件信息注册到变量, 用来生成etcdkeeper配置文件, 首先用cat来获取: tasks/main.yml:

  结果发现, 生成的配置里, 换行符都被换成了空格 尝试使用slurp模块:

  结果换行符都保留了下来, 格式正确.  

用sed命令进行整段替换

sed 整段插入: 下面是一个xml文件 1.txt:

需求: 要在匹配</actions>字段后插入如下整段内容:

方法一:

  方法二:

  参考: https://stackoverflow.com/questions/6684487/sed-replace-with-variable-with-multiple-lines https://www.coder.work/article/2570180