构建基于 nodejs 能够连接 aws eks 集群的 docker 基础镜像
背景
想要从 gitlab 上通过 gitlab-ci 自动构建并推送到 aws eks 集群上,需要能够从 ci 上直接执行 aws 命令。
支持连接多套集群,例如腾讯云 tke 和 aws eks。
构建镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| FROM node:18.16-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add -U --no-cache tzdata curl docker rsync openssh-client alpine-sdk build-base libffi-dev openssl-dev execline zip coreutils RUN apk add --no-cache aws-cli
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo "Asia/Shanghai" >/etc/timezone
RUN npm install pnpm -g --unsafe-perm
COPY ./kubectl /usr/local/bin/kubectl RUN chmod +x /usr/local/bin/kubectl COPY ./kubectl-config /.kube/config ENV KUBECONFIG=$KUBECONFIG:/.kube/config
COPY ./aws/config /.aws/config COPY ./aws/credentials /.aws/credentials ENV AWS_CONFIG_FILE=/.aws/config ENV AWS_SHARED_CREDENTIALS_FILE=/.aws/credentials
CMD ["node"]
|
注意点
kubectl-config 文件需要将多套集群的配置合到一起,然后使用 kubectl config use-context xxx
切换配置连接集群。
aws 除了使用配置文件,还需要运行容器内用 aws-cli 的命令来连接集群,需要把 集群证书页一并放在镜像里。