将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似乎只将本地(开发)计算机的端口转发到特定的

这是我理解相关流程的方式:

  • 当请求kubernetes服务(例如通过http)时,我使用的是端口80
  • 请求被转发到pod(仍在端口80上)
  • 端口将请求转发给暴露端口80的(docker)容器
  • 容器处理请求
  • 然而,我的容器暴露了一个不同的端口,比如3000。 如何在步骤2或步骤3中创建80:3000这样的端口映射

    kubernetes文档中有一些令人困惑的选项,如
    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