如何卷曲部署在 Kubernetes 上的容器?

How to curl container deployed on Kubernetes?

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

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

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

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

Docker部署镜像文件:

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

EXPOSE 3000
CMD ["node", "dist/index.js"]

deployment.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

我尝试了什么:

  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>

如果从 IP 列中获取 IP 地址并尝试卷曲它,没有任何反应:

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

  1. 找到 运行将我的 K8s pod 与我的容器连接起来的 K8s 节点,并尝试卷曲该节点的 public IP 地址

同样的事情:没有回应。

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

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

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

kubectl expose deployment vuekcal --type=NodePort --name=example-service

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

访问它

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

Public节点IP

要获取public节点IP,运行以下命令:

kubectl get nodes -o wide

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

节点端口

它与您 deployment.yaml 中的 containerPort 不同。
要找到 NodePort,运行 这个命令:

kubectl describe service example-service

当 运行ning kubectl expose deployment ... 时,将 example-service 替换为您在 --name= 中编写的任何内容(此 post 中的第一个命令)

在你 运行 命令之后,你会看到这样的东西:

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

放在一起

133.73.133.7:31110