K8S容器内安装cur/telnet命令(Alpine Linux离线环境安装curl/telnet或其他工具)

背景

需求:

  • 微服务的基础是镜像,通常在最小化的Linux镜像中安装jdk,然后运行编译好的java程序。将镜像运行到K8S上就得到了微服务Pod,Pod通常使用安装K8S时配置的私有网段,与宿主机不同。
  • 很多时候需要排查从Pod网段内访问K8S宿主机网段、其它外部Linux网段或域名接口等等,需要在Pod容器内执行curl或telnet等常用命令。
  • 但普遍最常用的最小化的Linux容器镜像AlpineLinux中默认没有curl、telnet等工具,需要手动安装。

解决:

  • 方式一:(推荐不能停机的Pod使用)在个人电脑上创建可以上网的alpine Linux容器,获取curl安装包,传输到K8S容器内手动安装。
  • 方式二:(推荐可以停机、尚未上线的Pod使用)重新准备新的基础镜像供开发使用,制定标准,后续使用的最小化镜像都必须默认安装curl/telent等工具。

解决

方式一:容器不停机安装curl

简要步骤:

  1. 本地获取curl安装包:确认生产使用的alpine版本、拉取镜像运行容器、下载apk安装包。
  2. 将curl安装包复制到K8S宿主机:scp或lrzsz上传文件至K8S服务器。
  3. 将curl安装包复制到目标Pod容器:kubectl cp复制文件到具体容器。
  4. 容器内安装apk:登录容器安装curl。
  5. 测试curl的使用。
  6. 优点/缺点。

1.本地获取curl安装包:

确认生产alpine版本为3.8:
在K8S上,通过k9s工具/K8S-dashboard/docker exec等命令登录目标容器,执行命令cat /etc/os-release查看系统版本。

bash-4.4# hostname 
file-tg-cfd48df98-fnzbv
bash-4.4# cat /etc/os-release 
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.8.2
PRETTY_NAME="Alpine Linux v3.8"
HOME_URL="http://alpinelinux.org"
BUG_REPORT_URL="http://bugs.alpinelinux.org"
bash-4.4# 

在本人电脑(或其它运行docker可以上网的服务器)上,搜索拉取镜像,运行容器

PS C:\Users\Czm> docker pull alpine:3.8
3.8: Pulling from library/alpine
486039affc0a: Pull complete
Digest: sha256:2bb501e6173d9d006e56de5bce2720eb06396803300fe1687b58a7ff32bf4c14
Status: Downloaded newer image for alpine:3.8
docker.io/library/alpine:3.8
PS C:\Users\Czm> docker run -itd --name al38 alpine:3.8 /bin/sh
1e4353774d57297b44c10dafd4b30335015aae80bcee342dcf929bdf3f0bba92
PS C:\Users\Czm> docker ps
CONTAINER ID   IMAGE                                        COMMAND       CREATED         STATUS          PORTS     NAMES
1e4353774d57   alpine:3.8                                   "/bin/sh"     3 seconds ago   Up 2 seconds              al38

登录容器下载apk安装包:

PS C:\Users\Czm> docker exec -it al38 /bin/sh

更换alpine apk源为国内源:

# 清华大学源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
# 阿里云源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 中科大源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories

创建存放apk的目录,下载curl及其依赖:

/ # mkdir curl
/ # cd curl/ 
/curl # apk fetch curl -R -o /curl
Downloading libssh2-1.9.0-r1
Downloading zlib-1.2.11-r1
Downloading musl-1.1.19-r11
Downloading libcurl-7.61.1-r3
Downloading busybox-1.28.4-r3
Downloading libressl2.7-libssl-2.7.5-r0
Downloading nghttp2-libs-1.39.2-r0
Downloading libressl2.7-libcrypto-2.7.5-r0
Downloading ca-certificates-20191127-r2
/curl # ls
busybox-1.28.4-r3.apk               curl-7.61.1-r3.apk                  libressl2.7-libcrypto-2.7.5-r0.apk  libssh2-1.9.0-r1.apk                nghttp2-libs-1.39.2-r0.apk
ca-certificates-20191127-r2.apk     libcurl-7.61.1-r3.apk               libressl2.7-libssl-2.7.5-r0.apk     musl-1.1.19-r11.apk                 zlib-1.2.11-r1.apk
/curl #
/curl # apk fetch busybox-extras -R -o /curl
Downloading busybox-extras-1.28.4-r3

打包所有apk文件为一个tar包,方便传输:

/ # tar -zcvf czm-231110-Alpine3.8-curl.telnet.tgz /curl/

2.将curl安装包复制到K8S宿主机:scp或lrzsz上传文件至K8S服务器。

退出容器命令行,返回Windows cmd,执行docker cp命令,复制tar包到Windows。

PS C:\Users\Czm> docker ps
CONTAINER ID   IMAGE                                        COMMAND       CREATED        STATUS        PORTS     NAMES
1e4353774d57   alpine:3.8                                   "/bin/sh"     16 hours ago   Up 16 hours             al38
3127f7c3a2bd   anapsix/alpine-java:8_server-jre_unlimited   "/bin/bash"   7 weeks ago    Up 17 hours             tz
PS C:\Users\Czm> docker cp al38:/czm-231110-Alpine3.8-curl.telnet.tgz d:/czm-231110-Alpine3.8-curl.telnet.tgz
Successfully copied 2.78MB to d:\czm-231110-Alpine3.8-curl.telnet.tgz
PS C:\Users\Czm>

将tar包传输到K8S服务器

[sysma@prod-k8s-0001 ~]$ pwd
/home/sysma
[sysma@prod-k8s-0001 ~]$ ll |grep Alpine
-rw-r--r-- 1 sysma sysma    2781771 Nov 10 10:07 czm-231110-Alpine3.8-curl.telnet.tgz

3.将curl安装包复制到目标Pod容器:kubectl cp复制文件到具体容器。

[sysma@prod-k8s-0001 ~]$ ll |grep Al
-rwxr-xr-x 1 sysma sysma        365 Oct 31 09:28 07_getAllDeploy.sh
-rw-r--r-- 1 sysma sysma    2781771 Nov 10 10:07 czm-231110-Alpine3.8-curl.telnet.tgz
drwxr-xr-x 5 sysma sysma        326 Nov  3 09:30 czm_BathAlterDeployEnv
[sysma@prod-k8s-0001 ~]$ kubectl cp czm-231110-Alpine3.8-curl.telnet.tgz file-tg-cfd48df98-fnzbv:/ -c file-tg -n media
Error from server (NotFound): pods "file-tg-cfd48df98-fnzbv" not found
[sysma@prod-k8s-0001 ~]$ kubectl cp czm-231110-Alpine3.8-curl.telnet.tgz file-tg-9b658c46-xkd48:/ -c file-tg -n media
[sysma@prod-k8s-0001 ~]$ 

4. 容器内安装apk:登录容器安装curl。

使用K9S工具登录容器

选择不是sider-car的容器
在这里插入图片描述
刚才kubectl 复制的文件已经到了容器内部。
在这里插入图片描述
解压,然后安装curl工具,貌似apk无法自动解决依赖问题,需要按如下顺序安装之前下载的apk安装包:
在这里插入图片描述
实际操作如下:

bash-4.4# ls
busybox-1.28.4-r3.apk               libcurl-7.61.1-r3.apk               mii-tool-1.60_git20140218-r2.apk    zlib-1.2.11-r1.apk
busybox-extras-1.28.4-r3.apk        libressl2.7-libcrypto-2.7.5-r0.apk  musl-1.1.19-r11.apk
ca-certificates-20191127-r2.apk     libressl2.7-libssl-2.7.5-r0.apk     net-tools-1.60_git20140218-r2.apk
curl-7.61.1-r3.apk                  libssh2-1.9.0-r1.apk                nghttp2-libs-1.39.2-r0.apk
bash-4.4# apk add --no-network nghttp2-libs-1.39.2-r0.apk 
WARNING: Ignoring APKINDEX.adfa7ceb.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.efaa1f73.tar.gz: No such file or directory
(1/1) Installing nghttp2-libs (1.39.2-r0)
Executing glibc-bin-2.29-r0.trigger
OK: 24 MiB in 30 packages
bash-4.4# apk add --no-network libssh2-1.9.0-r1.apk 
WARNING: Ignoring APKINDEX.adfa7ceb.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.efaa1f73.tar.gz: No such file or directory
(1/1) Installing libssh2 (1.9.0-r1)
Executing glibc-bin-2.29-r0.trigger
OK: 24 MiB in 31 packages
bash-4.4# apk add --no-network libcurl-7.61.1-r3.apk 
WARNING: Ignoring APKINDEX.adfa7ceb.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.efaa1f73.tar.gz: No such file or directory
(1/1) Installing libcurl (7.61.1-r3)
Executing glibc-bin-2.29-r0.trigger
OK: 24 MiB in 32 packages
bash-4.4# apk add --no-network curl-7.61.1-r3.apk 
WARNING: Ignoring APKINDEX.adfa7ceb.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.efaa1f73.tar.gz: No such file or directory
(1/1) Installing curl (7.61.1-r3)
Executing busybox-1.28.4-r3.trigger
OK: 24 MiB in 33 packages
bash-4.4# 

5. 测试curl的使用。

从容器内部发送任意curl请求,成功。如图是post请求发送一个500MB文件到对端服务器
在这里插入图片描述

6. 优点/缺点。

优点:pod不用重启,业务不用中断。
缺点:传输安装包复杂,需要提前准备相同版本alpine系统镜像。容器重启后curl、telnet工具丢失,还得重复再装一次。

方式二:容器停机,改为使用自定义基础镜像

就不详细写了,需要详细过程的留言。
简要步骤:

  1. 本地创建纯净alpine Linux容器
  2. 登录alpine Linux容器安装自定义软件
  3. 提交自定义容器为镜像:使用docker commit命令提交基础镜像。
  4. 联系开发更换底层基础镜像:将自定义镜像推送至harbor仓库,通知开发修改dockerfile,将FROM 基础镜像修改为自定已经向。
  5. 重新部署并登录容器测试:登录容器后,自带curl和其他命令。
    优点:一劳永逸,一次安装之后多次更新微服务都能在基础镜像容器中使用curl命令。
    缺点:容器需要重新发布,业务需要中断。

结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/188385.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能基础_机器学习022_使用正则化_曼哈顿距离_欧氏距离_提高模型鲁棒性_过拟合_欠拟合_正则化提高模型泛化能力---人工智能工作笔记0062

然后我们再来看一下,过拟合和欠拟合,现在,实际上欠拟合,出现的情况已经不多了,欠拟合是 在训练集和测试集的准确率不高,学习不到位的情况. 然后现在一般碰到的是过拟合,可以看到第二个就是,完全就把红点蓝点分开了,这种情况是不好的, 因为分开是对训练数据进行分开的,如果来…

解决《荒野大镖客》提示emp.dll文件丢失问题,总结5个修复方法

在当今数字时代,游戏已经成为人们休闲娱乐的重要方式。作为一名游戏爱好者,笔者在近期体验《荒野大镖客》这款游戏时,遇到了一个令人苦恼的问题——emp.dll文件丢失。这个问题让游戏的无法启动进行。本文将围绕这一问题,探讨其原因…

智链引擎CEO李智:游戏化增长中台,让裂变营销快十倍、便宜十倍、好十倍丨数据猿专访...

大数据产业创新服务媒体 ——聚焦数据 改变商业 双十一电商大战一触即发,各个垂类的App也都希望能够借力双十一营销季,实现用户和营收双增长。MarTech在这个风口上,又成为2B赛道关注的焦点。 业内人士指出,MarTech的引入催生营销…

考研数据结构单链表的增删改查看这一篇就够了

目录 一. 单链表的特点 1.1 解引用拓展 🤖 二. 单链表的操作 2.1不带头节点的操作 2.1.1 打印 2.1.1.1 创建结点 2.1.2 尾插(需要二级指针) 注意形参的值不改变实参:(精髓部分) 2.1.3 头插 2.1.4…

Redis被攻击纪实

一、前言 声明:本文仅供技术交流使用,严禁采用本文的方法进行任何非法活动。 上周新来的同事分享Redis的原理和机制,想起2017年的时候测试环境Redis被攻击,最后只能重新安装服务器,今天试验一把利用Redis漏洞进行攻击…

我的前端笔记JS

js介绍 js是编程语音,之前学的html和css是标记语言 百度搜索mdn官网就可以 语法 输出、对话框、控制台日志、输入对话框 字面量 简单理解就是看到的内容是属于什么类型,例如1232,这个是属于数字字面量

Ubuntu配置Yolov8环境并训练自己的数据集

文章目录 一、环境配置与功能测试1.1 安装1.2 目标检测1.3 实例分割1.4 分类1.5 姿态检测 二、训练数据标注三、数据集训练方法3.1 命令训练3.2 代码训练 前言:需要先安装CUDA和Anaconda,它们的安装参考我这篇文章:Ubuntu配置深度学习环境&am…

链表经典面试题之二

今天我们做一道环形链表的题目力扣141题https://leetcode.cn/problems/linked-list-cycle/ 这道题让我们分析链表中是否存环,存在的话返回true,不存在返回false。首先看到这道题我们要捋顺思路,怎么才能达到它要的效果?要找出是否…

transformers安装避坑

1.4 下载rust编辑器 看到这里你肯定会疑惑了,我们不是要用python的吗? 这个我也不知道,你下了就对了,不然后面的transformers无法安装 因为是windows到官网选择推荐的下载方式https://www.rust-lang.org/tools/install。 执行文…

开发知识点-Ant-Design-Vue

Ant-Design-Vue a-input a-input Vue组件 a-spin 加载中的效果 data字段 mounted钩子函数 Ant Design Vue 组件库 list-type“picture-card” 上传的图片作为卡片展示 name show-upload-list action :beforeUpload“handleBeforeUpload” :headers“customHeaders” :disabl…

剑指JUC原理-16.读写锁

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码🔥如果感觉博主的文章还不错的话,请👍三连支持&…

11-09 周四 CNN 卷积神经网络基础知识

11-09 周四 CNN 卷积神经网络 时间版本修改人描述2023年11月9日09:38:12V0.1宋全恒新建文档 简介 学习一下CNN&#xff0c;卷积神经网络。使用的视频课程。视觉相关的任务&#xff1a; 人脸识别 卷积网络与传统网络的区别&#xff1a; <img altimage-20231109094400591 s…

专业128分总分390+上岸中山大学884信号与系统电通院考研经验分享

专业课884 信号系统 过年期间开始收集报考信息&#xff0c;找到了好几个上岸学姐和学长&#xff0c;都非常热情&#xff0c;把考研的准备&#xff0c;复习过程中得与失&#xff0c;都一一和我分享&#xff0c;非常感谢。得知这两年专业课难度提高很多&#xff0c;果断参加了学长…

QT 布局管理综合实例

通过一个实例基本布局管理&#xff0c;演示QHBoxLayout类、QVBoxLayout类及QGridLayout类效果 本实例共用到四个布局管理器&#xff0c;分别是 LeftLayout、RightLayout、BottomLayout和MainLayout。 在源文件“dialog.cpp”具体代码如下&#xff1a; 运行效果&#xff1a; Se…

外部访问K8S集群内部的kafka集群服务

不许转载 kafka 部署 把 kafka 部署到 k8s 后&#xff0c;我们肯定是通过 service 从 k8s 外部访问 kafaka。这里的 service 要么是 NodePort&#xff0c; 要么是 LoadBalancer 类型。我们使用的方式是 LoadBalancer。 我们先看下面这张图&#xff0c;这是 kafka 在集群中的网…

从F5 BIG-IP RCE漏洞(CVE-2023-46747)来看请求走私的利用价值

0x01 前言 F5 BIG-IP广域流量管理器是一种网络流量管理设备&#xff0c;用于提升链路性能与可用性。F5在金融行业具有特别广泛的使用量&#xff0c;做过各大银行攻防演练的小伙伴对这个系统应该不会陌生。 最近爆出的CVE-2023-46747漏洞能达到远程RCE的效果&#xff0c;属于严重…

软件测试之冒烟测试详解

1. 核心 冒烟测试就是完成一个新版本的开发后&#xff0c;对该版本最基本的功能进行测试&#xff0c;保证基本的功能和流程能走通。 如果不通过&#xff0c;则打回开发那边重新开发&#xff1b; 如果通过测试&#xff0c;才会进行下一步的测试(功能测试&#xff0c;集成测试…

EDA实验----四选一多路选择器设计(QuartusII)

目录 一&#xff0e;实验目的 二&#xff0e;实验仪器设备 三&#xff0e;实验原理&#xff1a; 四&#xff0e;实验要求 五&#xff0e;实验内容及步骤 1.实验内容 2.实验步骤 六&#xff0e;实验报告 七.实验过程 1.创建Verilog文件&#xff0c;写代码 2.波形仿真 …

图扑智慧农业:农林牧数据可视化监控平台

数字农业是一种现代农业方式&#xff0c;它将信息作为农业生产的重要元素&#xff0c;并利用现代信息技术进行农业生产过程的实时可视化、数字化设计和信息化管理。能将信息技术与农业生产的各个环节有机融合&#xff0c;对于改造传统农业和改变农业生产方式具有重要意义。 图…

浙江大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;主页 | 教育漏洞报告平台 兑换价格&#xff1a;20金币 获取条件&#xff1a;提交浙江大学任意中危或以上级别漏洞