在Kubernetes的pod中为alpine安装curl
问题起因是,作者在Kubernetes集群中启动了一个服务,想要通过kubectl exec
进入到一个pod的容器中访问服务,但是发现没有curl命令(其实wget可以将就一下)。
kubectl exec进入容器
kubectl exec -it goweb-rs-vkwqb /bin/sh
添加apk国内镜像
$ cat /etc/apk/repositories
https://mirror.tuna.tsinghua.edu.cn/alpine/v3.11/main/
https://mirror.tuna.tsinghua.edu.cn/alpine/v3.11/community
http://mirrors.ustc.edu.cn/alpine/v3.11/main
http://mirrors.ustc.edu.cn/alpine/v3.11/community
然后安装
$ apk add --no-cache curl
fetch https://mirror.tuna.tsinghua.edu.cn/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
WARNING: Ignoring https://mirror.tuna.tsinghua.edu.cn/alpine/v3.11/main/x86_64/APKINDEX.tar.gz: temporary error (try again later)
fetch https://mirror.tuna.tsinghua.edu.cn/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
WARNING: Ignoring https://mirror.tuna.tsinghua.edu.cn/alpine/v3.11/community/x86_64/APKINDEX.tar.gz: temporary error (try again later)
不太行,ping一下mirror.tuna.tsinghua.edu.cn,不通。在宿主机ping了一下,通了,并且拿到了ip。再回到容器中ping了ip,通的,说明dns解析有问题。
打开/etc/resolv.conf
,加入一行nameserver 114.114.114.114
,然后再试一次
$ apk update --no-cache
$ apk add --no-cache curl
大功告成
$ curl --version
curl 7.67.0 (x86_64-alpine-linux-musl) libcurl/7.67.0 OpenSSL/1.1.1g zlib/1.2.11 nghttp2/1.40.0
Release-Date: 2019-11-06
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS HTTP2 HTTPS-proxy IPv6 Largefile libz NTLM NTLM_WB SSL TLS-SRP UnixSockets
另一个方法是从官网下载源码然后编译安装。