如何卷曲部署在 Kubernetes 上的容器?
How to curl container deployed on Kubernetes?
- 我构建了 Docker 图像并将其上传到 Amazon ECS(图像存储库)。
- 我写了一个
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
我尝试了什么:
- 运行
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 是本地的。
- 找到 运行将我的 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
- 我构建了 Docker 图像并将其上传到 Amazon ECS(图像存储库)。
- 我写了一个
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
我尝试了什么:
- 运行
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 是本地的。
- 找到 运行将我的 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