将kubernetes服务中的传入端口映射到docker容器上的不同端口
这是我理解相关流程的方式:将kubernetes服务中的传入端口映射到docker容器上的不同端口,kubernetes,portforwarding,Kubernetes,Portforwarding,这是我理解相关流程的方式: 当请求kubernetes服务(例如通过http)时,我使用的是端口80 请求被转发到pod(仍在端口80上) 端口将请求转发给暴露端口80的(docker)容器 容器处理请求 然而,我的容器暴露了一个不同的端口,比如3000。 如何在步骤2或步骤3中创建80:3000这样的端口映射 kubernetes文档中有一些令人困惑的选项,如targetport和hostport,对我没有帮助kubectl port forward似乎只将本地(开发)计算机的端口转发到特定的
targetport
和hostport
,对我没有帮助kubectl port forward
似乎只将本地(开发)计算机的端口转发到特定的pod进行调试
以下是我在google云中设置服务时使用的命令:
kubectl run test-app --image=eu.gcr.io/myproject/my_app --port=80
kubectl expose deployment test-app --type="LoadBalancer"
我发现我需要在第二个命令中添加一些参数:
kubectl expose deployment test-app --type="LoadBalancer" --target-port=3000 --port=80
这将创建一个服务,将传入的http流量(在端口80上)定向到其在端口3000上的POD
一种更好的方法是使用yaml文件service.yaml
和deployment.yaml
并调用
kubectl create -f deployment.yaml
kubectl create -f service.yaml
文件中包含这些内容的位置
# deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: app-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: test-app
spec:
containers:
- name: user-app
image: eu.gcr.io/myproject/my_app
ports:
- containerPort: 3000
及
请注意,服务的选择器必须与部署的标签匹配。可能存在一些打字错误,因为您定义了
targetPort
,当容器公开端口3000
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
selector:
app: test-app
ports:
- port: 80
targetPort: 3000
type: LoadBalancer