kubernetes - 将 kubernetes 服务中的传入端口映射到 docker 容器上的不同端口

标签 kubernetes portforwarding

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

  • 当请求 kubernetes 服务(例如通过 http)时,我使用的是端口 80。
  • 请求被转发到一个 pod(仍在端口 80)
  • 该端口将请求转发到暴露端口 80
  • 的(docker)容器
  • 容器处理请求

  • 但是我的容器公开了一个不同的端口,比如说 3000。
    如何在步骤 2 或 3 中进行像 80:3000 这样的端口映射?

    有一些令人困惑的选项,例如 targetporthostport在对我没有帮助的 kubernetes 文档中。 kubectl port-forward似乎只将我的本地(开发)机器的端口转发到特定的 pod 进行调试。

    这些是我用于在谷歌云中设置服务的命令:
    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.yamldeployment.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
    


    # service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: app-service
    spec:
      selector:
        app: test-app
      ports:
      - port: 80
        targetPort: 3000
      type: LoadBalancer
    

    请注意,服务的选择器必须与部署的标签相匹配。

    关于kubernetes - 将 kubernetes 服务中的传入端口映射到 docker 容器上的不同端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39484653/

    相关文章:

    kubernetes - 在 kubernetes 上运行本地制作的容器

    kubernetes - 当容器转换为就绪时,Kubernetes 就绪探针是否应该发出事件?

    linux - iptables 转发端口到两个 eth 卡

    ssh - 从不同主机连接到 SSH 转发端口

    带有容器的 Azure 应用服务不遵守使用 udp 进行端口转发的 docker-compose 语法

    kubernetes - 更改安装在投影卷上的 kubernetes secret 文件的默认文件所有者和组所有者

    kubernetes - daemonset 会始终部署到所有节点吗?

    kubernetes - 无法获取集群配置 - IBM Cloud

    macos - Vagrant VirtualBox 无法正确进行端口转发

    apache - 在 80 端口上的主机和 docker 容器中运行 apache