kubernetes:带有节点端口的负载均衡器服务

时间:2021-01-21 12:24:33

标签: kubernetes

我有一个 LoadBalancer 服务,它在集群外公开 3300 端口。我想为内部通信打开一个新端口,以便其他 pod 可以与此服务通信,但此端口不应暴露在集群外。
基本上,通信看起来像这样:

                                   my-svc:3301
    pod/my-app  <--- svc/my-svc  <------------- pod/my-new-app
                      ^
                      | ext-ip:3300
                      |
                   outside_world
apiVersion: v1
kind: Service
metadata:
  name: my-svc
spec:
  type: LoadBalancer
  ports:
  - name: my-port
    protocol: "TCP"
    port: 3300
    targetPort: 3300
  selector:
    app: my-app

有没有办法将新端口包含在此服务本身中?我是否必须创建另一个 NodePort 类型的服务?

2 个答案:

答案 0 :(得分:1)

如果“内部”和“外部”通信路径使用不同的端口,则需要单独的 (ClusterIP) 服务。没有办法说你想要一个服务来创建一个 LoadBalancer(或一个 NodePort),而只是为了某些服务端口。

如果两者都可以使用相同的端口,那么您可以将其他 pod 指向 http://my-svc:3300。即使是 LoadBalancer(或 NodePort)服务,也可以像 ClusterIP 服务一样使用其 name:port: 调用它。

答案 1 :(得分:0)

使用另一个答案中提到的内部通信所需的端口创建一个 ClusterIP 类型的新服务(默认服务类型)。

apiVersion: v1
kind: Service
metadata:
  name: my-svc-internal
spec:
  type: ClusterIP
  ports:
  - name: my-port
    protocol: "TCP"
    port: 3301
    targetPort: 3301
  selector:
    app: my-app