【问题标题】:Tunnelling via pod通过吊舱隧道
【发布时间】:2017-01-26 15:08:55
【问题描述】:

我在服务器上运行了多个 Kubernetes pod。其中一个 pod 包含一个仅接受来自特定子网(即其他 Kubernetes pod)的连接的数据库应用程序。

我正在尝试从服务器本身连接到数据库应用程序,但连接被拒绝,因为服务器的 IP 不是允许的子网的一部分。

有没有办法创建一个简单的 pod,它接受来自服务器的连接并将它们转发到包含 DB 应用程序的 pod?

很遗憾,数据库应用无法重新配置以接受其他连接。

谢谢

【问题讨论】:

    标签: kubernetes portforwarding tunnel


    【解决方案1】:

    最简单的解决方案可能是将另一个容器添加到运行 socat 或类似内容的 pod 中,并使其侦听并连接到本地 pod 的 IP(重要:连接到 pod ip,如果您的数据库程序已配置,则不是 127.0.0.1只接受来自覆盖网络的连接)。 然后修改这些 pod 的服务并添加额外的端口。

    下面的示例假设端口 2000 正在运行您的程序,而 2001 将是在 pod 内转发到 2000 的端口。

    例子(例子是运行netcat模拟你的数据库程序):

    apiVersion: v1
    kind: Pod
    metadata:
      name: database
      labels:
        app: database
    spec:
      containers:
      - name: alpine
        image: alpine
        command: ["nc","-v","-n","-l","-p","2000"]
        ports:
        - containerPort: 2000
      - name: socat
        image: toughiq/socat
        ports:
        - containerPort: 2001
        env:
        - name: LISTEN_PROTO
          value: "TCP4"
        - name: LISTEN_PORT
          value: "2001"
        - name: TARGET_PROTO
          value: "TCP4"
        - name: TARGET_HOST
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: TARGET_PORT
          value: "2000"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: database
    spec:
      selector:
        app: database
      ports:
      - name: myport
        port: 2000
        targetPort: 2000
        protocol: TCP
      - name: socat
        port: 2001
        targetPort: 2001
        protocol: TCP
      externalIPs: [xxxxxx]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-24
      • 2021-04-20
      • 1970-01-01
      • 2020-12-08
      • 2016-10-22
      • 2021-07-22
      • 2015-10-08
      • 1970-01-01
      相关资源
      最近更新 更多