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

时间:2020-02-06 13:29:36

标签: docker kubernetes kubectl kops

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

值得一提的是,我已使用kops将K8s集群部署到AWS EC2

我可以使用Kubernetes仪表板看到容器在Kubernetes容器中运行。此外,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"]

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地址并尝试对其进行卷曲,则不会发生任何事情:

curl not working for ports 80 and 3000 on an example copied ip

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

  1. 使用容器查找运行我的K8s pod的K8s节点,并尝试卷曲该节点的公共ip地址

external ip of aws ec2 node

同一件事:没有回应。 enter image description here

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

我不知道该怎么办。如何查询Deployment.yaml在Kubernetes节点内设置的映像?

1 个答案:

答案 0 :(得分:2)

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

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

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

访问它

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

公共节点IP

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

kubectl get nodes -o wide

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

NodePort

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

kubectl describe service example-service

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

运行命令后,您将看到以下内容: enter image description here

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

放在一起

133.73.133.7:31110