首页 > 解决方案 > 容器上的端口如何映射到 Pod 上的容器?

问题描述

我现在正在学习 Kubernetes。我已经构建了一个简单的 python 应用程序,它使用 Flask 来公开其余的 API。Flask 默认使用端口 5000 来运行服务器。我的 API 看起来像 -

http://0.0.0.0:5000/api

应用程序内置在 docker 镜像中

FROM python:3.8.6-alpine

COPY . /app
WORKDIR /app
RUN \
    apk add --no-cache python3 postgresql-libs && \
    apk add --no-cache --virtual .build-deps gcc python3-dev musl-dev postgresql-dev && \
    python3 -m pip install -r requirements.txt --no-cache-dir && \
    apk --purge del .build-deps

ENTRYPOINT ["python3"]
CMD ["app.py"]

我将它部署在具有 pod 定义的 Kubernetes pod 中

apiVersion: v1
kind:  Pod
metadata:
  name: python-webapp
  labels:
    type: web
    use: internal
spec:
  containers:
    - name: python-webapp
      image: repo/python-webapp:latest

一切正常,我可以直接通过 Kubernetes 服务访问 pod 上的 api。我很困惑 POD 是如何知道容器中的应用程序在端口 5000 上运行的?容器上的端口到 pod 上的端口的映射在哪里?

标签: kuberneteskubernetes-podkubernetes-networking

解决方案


我很困惑 POD 是如何知道容器中的应用程序在端口 5000 上运行的?

豆荚不知道这一点。容器中的应用程序,在 pod 中可以响应任何端口上的任何请求。

但是要将其公开到集群外部,您可能会通过服务(可以映射到不同端口)和负载均衡器将流量从特定端口转发到应用程序上的特定端口。

您可以使用网络策略来限制集群中的流量,例如特定端口或服务。


推荐阅读