gpt4 book ai didi

docker - Kubernetes Pods 与内部/外部 IP 地址互通

转载 作者:行者123 更新时间:2023-12-02 12:07:27 25 4
gpt4 key购买 nike

假设我在本地机器上有一个 Python 代码,它在 localhost 和端口 8000 上进行监听,如下所示:

import waitress
app = hug.API(__name__)
app.http.add_middleware(CORSMiddleware(app))
waitress.serve(__hug_wsgi__, host='127.0.0.1', port=8000)

此代码接受 127.0.0.1:8000 上的请求并发回一些回应。

现在我想将这个应用程序(以及另外两个相关的应用程序)移动到 Docker 中,并使用 Kubernetes 来编排它们之间的通信。

但为简单起见,我将只使用这个 Python 节点(应用程序)。

首先,我使用以下方法构建了 docker 镜像:
docker build -t gcr.io/${PROJECT_ID}/python-app:v1 .

然后我将它插入 gcloud docker (我使用的是谷歌云而不是 docker hub):
gcloud docker -- push gcr.io/${PROJECT_ID}/python-app:v1

现在我创建了容器集群:
gcloud container clusters create my-cluster

将应用程序部署到 kubernates 中:
kubectl run python-app --image=gcr.io/${PROJECT_ID}/python-app:v1 --port 8000

最后通过以下方式将其暴露在互联网上:
kubectl expose deployment python-app --type=LoadBalancer --port 80 --target-port 8000

现在命令 kubectl get services 的输出是:

kubectl get services

好的,我的问题是,我想从另一个应用程序(比如说一个节点 js 应用程序)发送一个请求。
  • 我怎么能在外部做到这一点?即从任何机器。
  • 我怎么能在内部做到这一点?即来自另一个容器 pods 。

  • 如何让我的 Python 应用程序使用这些 IP 地址并监听它们?

    这是 Python 应用程序的 Dockerfile:
    FROM python:3
    WORKDIR /usr/src/app
    COPY requirements.txt ./
    RUN pip install --no-cache-dir -r requirements.txt
    COPY . .
    CMD [ "python", "./app.py" ]

    提前致谢!

    最佳答案

    对外

    通过运行:

    kubectl run python-app --image=gcr.io/${PROJECT_ID}/python-app:v1 --port 8000

    您指定您的 pod 在端口 8000 上监听。

    通过运行:
    kubectl expose deployment python-app --type=LoadBalancer --port 80 --target-port 8000

    您指定您的服务在端口 80 上进行监听,并且该服务将流量发送到 TargetPort 8000(pod 监听的端口)。

    因此,可以总结为您的配置流量遵循以下路径:
    traffic (port 80) > Load Balancer > Service (Port 80) > TargetPort/Pod (port 8000)

    使用负载均衡器类型的服务(而不是替代的“入口”,它创建一个节点端口类型的服务,以及一个 HTTP(s) 负载均衡器而不是 TCP 负载均衡器),您指定以 pod 为目标的流量应该到达在端口 80 上的 LoadBalancer 上,然后该服务将此流量定向到您应用程序上的端口 8000。因此,如果您想根据屏幕截图中的地址将流量从外部来源引导到您的应用程序,您可以将流量发送到 35.197.94.202:80。

    内部

    正如其他人在评论中指出的那样,集群 IP 可用于内部定位 pod。您指定为服务端口的端口(在您的情况下为 80,尽管这可以是您为服务选择的任何数字)可以与集群 IP 一起使用,以针对该服务所针对的集群上的 pod。例如,您可以定位:

    10.3.254.16:80

    但是,要针对特定​​的 pod,您可以使用 pod IP 地址和 pod 监听的端口。您可以通过在 pod 上运行 describe 命令来发现这一点:
    kubectl describe pod

    或者通过运行:
    kubectl get endpoints 

    这会生成它列出的 pod IP 和端口。

    关于docker - Kubernetes Pods 与内部/外部 IP 地址互通,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49829948/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com