带nginx入口控制器的外部服务的K8s服务LB

时间:2020-08-26 09:42:30

标签: kubernetes nginx-ingress

是否可以将k8s nginx-ingress配置为LB,以使K8s服务主动连接到托管在外部主机/端口上的外部后端(一次启用一次,连接回集群服务)?< / p>

类似于特使代理?这是在本地的香草K8上。

因此而不是平衡来自

的负载
client -> cluster -> service.

我在寻找

service -> nginx-ingress -> external-backend.

2 个答案:

答案 0 :(得分:0)

在定义入口时,请使用nginx.ingress.kubernetes.io/configuration-snippet批注。还使用use-proxy-protocol: "true"启用代理协议。

使用此注释,您可以将其他配置添加到NGINX位置。

请看看:ingress-nginx-issueadvanced-configuration-with-annotations

答案 1 :(得分:0)

定义没有Service的Kubernetes selector。然后,您需要定义一个Endpoint。您可以将IP和端口放入端点。通常,您不为服务定义端点,但是由于服务没有Selector,因此您需要提供与服务同名的端点。

然后将Ingress指向服务。

这是一个在群集上公开Ingress并将流量发送到TCP 8081上的192.168.88.1的示例。

apiVersion: v1
kind: Service
metadata:
  name: router
  namespace: default
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8081
---
apiVersion: v1
kind: Endpoints
metadata:
  name: router
  namespace: default
subsets:
  - addresses:
      - ip: 192.168.88.1
      - ip: 192.168.88.2 # As per question below
    ports:
      - port: 8081
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: router
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - host: my-router.domain.com
      http:
        paths:
          - path: /
            backend:
              serviceName: router
              servicePort: 80