kubernetes 如何在k8s pod中使curl在我容器中可用?

rvpgvaaj  于 2023-02-21  发布在  Kubernetes
关注(0)|答案(3)|浏览(563)

我在我的pod中使用了busybox图像。我试图 curl 另一个pod,但是“curl is not found”。如何修复它?

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: front
  name: front
spec:
  containers:
  - image: busybox
    name: front
    command:
    - /bin/sh
    - -c
    - sleep 1d

此命令:

k exec -it front -- sh
curl service-anotherpod:80 -> 'curl not found'
e5nqia27

e5nqia271#

除了@ gohm 'c的答案之外,您还可以尝试使用Alpine Linux,或者创建自己的安装了curl的映像,或者使用pod中的apk add curl来安装它。
带alpine的pod示例:

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: front
  name: front
spec:
  containers:
  - image: alpine
    name: front
    command:
    - /bin/sh
    - -c
    - sleep 1d
cld4siwp

cld4siwp2#

busybox是一个单一的二进制程序,你不能安装额外的程序到它。你可以使用wget或者你可以使用busybox的一个不同的变种,如progrium,它带有一个包管理器,允许你做opkg-install curl

xmd2e60i

xmd2e60i3#

您可以创建自己的映像并将其部署到pod。

FROM alpine:latest

RUN apk update && \
    apk upgrade && \
    apk add --no-cache \
        bind-tools \
        curl \
        iproute2 \
        wget \
        && \
        : 
ENTRYPOINT [ "/bin/sh", "-c", "--" , "while true; do sleep 30; done;" ]

然后你可以像这样

docker image build -t networkutils:latest  .

像这样跑
docker container run -rm -d --name networkutils networkutils
并访问它的shell以运行curl、wget或您像这样安装的任何命令
docker container exec -it networkutils sh
要在k3s中运行和访问它,您可以创建如下部署文件

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: networkutils
  namespace: default
  labels:
    app: networkutils
spec:
  replicas: 1
  selector:
    matchLabels:
      app: networkutils
  template:
    metadata:
      labels:
        app: networkutils
    spec:
      containers:
      - name: networkutils-container
        image: networkutils:latest
        imagePullPolicy: Never

启动pod kubectl apply -f deployment.yml
然后访问shell kubectl exec -it networkutils -- /bin/sh

相关问题