繁体   English   中英

Kubernetes Pod与内部/外部IP地址的互通

[英]Kubernetes Pods intercommunication with internal/external IP addresses

可以说我在本地计算机上有一个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(我使用的是Google Cloud而不是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获得服务

好的,我的问题是,我想从另一个应用程序发送一个请求(让我们说一个节点js应用程序)。

  1. 我该如何在外部进行? 即从任何机器。
  2. 我怎样才能在内部做到这一点? 即从另一个容器吊舱。

如何让我的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负载平衡器而不是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和端口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM