[英]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
的輸出為:
好的,我的問題是,我想從另一個應用程序發送一個請求(讓我們說一個節點js應用程序)。
如何讓我的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.