如何curl部署在Kubernetes上的容器?

2 docker kubernetes kubectl kops

  1. 我构建了 Docker 映像并将其上传到 Amazon ECS(映像存储库)。
  2. 我已经编写了一个deployment.yaml文件并运行了kubectl apply -f deployment.yaml.

值得注意的是,我使用 kops 将 K8s 集群部署到 AWS EC2

我可以使用 Kubernetes 仪表板看到容器正在 Kubernetes Pod 中运行。还kubectl get pods -o wide向我展示了豆荚。

我部署的映像是一个公开一条路由的简单 API。我的问题是我不知道如何查询我刚刚部署的容器。

部署镜像的 Dockerfile:

FROM node:lts
COPY package*.json tsconfig.json ./
RUN npm ci
COPY . .
RUN npm run build

EXPOSE 3000
CMD ["node", "dist/index.js"]
Run Code Online (Sandbox Code Playgroud)

部署.yaml(kubectl apply -f deployment.yaml):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: vuekcal
spec:
  selector:
    matchLabels:
      app: vuekcal
  replicas: 2
  template:
    metadata:
      labels:
        app: vuekcal
    spec:
      containers:
        - name: search
          image: [my-repo-id].dkr.ecr.eu-central-1.amazonaws.com/k8s-search
          ports:
            - containerPort: 3000
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

  1. 跑步kubectl get pods -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP           NODE                                            NOMINATED NODE   READINESS GATES
vuekcal-6956589484-7f2kx   1/1     Running   0          16m   100.96.2.6   ip-172-20-54-21.eu-central-1.compute.internal   <none>           <none>
vuekcal-6956589484-f4pqf   1/1     Running   0          16m   100.96.1.7   ip-172-20-59-29.eu-central-1.compute.internal   <none>           <none>
Run Code Online (Sandbox Code Playgroud)

如果从列中获取 IP 地址IP并尝试对其进行卷曲,则不会发生任何情况:

在示例复制的 IP 上,curl 不适用于端口 80 和 3000

我认为这是因为这些 IP 是本地的。

  1. 查找正在使用我的容器运行 K8s pod 的 K8s 节点,并尝试获取该节点的公共 IP 地址

aws ec2节点的外部IP

同样的事情:没有回应。 在此输入图像描述

如果我在本地运行容器,一切都很好docker run k8s-search

我不知道在这里做什么。如何查询deployment.yaml在Kubernetes节点内设置的镜像?

Arg*_*dhu 5

要从集群外部访问 pod,您需要创建NodeportLoadBalancer类型的服务。

kubectl expose deployment vuekcal --type=NodePort --name=example-service
Run Code Online (Sandbox Code Playgroud)

然后通过访问它curl http://<public-node-ip>:<node-port>


!确保您运行了kubectl expose上面的命令!

公共节点IP

要获取公共节点IP,请运行以下命令:

kubectl get nodes -o wide
Run Code Online (Sandbox Code Playgroud)

并查看“EXTERNAL-IP”列。这是运行容器的节点的公共 IP。这是您应该尝试连接的地方。例如,您的节点的外部 IP 可以是133.71.33.7。记住这个IP。

节点端口

它与deployment.yaml 中的containerPort 不同。
要查找 NodePort,请运行以下命令:

kubectl describe service example-service
Run Code Online (Sandbox Code Playgroud)

替换example-service为您在--name=运行时写入的内容kubectl expose deployment ...(本文中的第一个命令)

运行命令后,您将看到类似以下内容: 在此输入图像描述

这是连接时应使用的端口。

把它放在一起

133.73.133.7:31110