首页 > 解决方案 > 在 Kind 上使用 Ingress 和 LoadBalancer 类型的服务

问题描述

在审查一个项目时,我发现了一个让我很感兴趣的定义:使用 Ingress 和 LoadBalancer 类型的服务,而无需在Kind上安装负载均衡器本身。按照定义,它似乎有效,但我不知道为什么。我说它有效,因为我能够按预期在浏览器上卷曲应用程序。

代码:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: server
  labels:
    app: server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: server
  template:
    metadata:
      labels:
        app: server
    spec:
      containers:
      - name: server
        image: localhost:5000/server:2.0
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: server
  name: server
spec:
  type: LoadBalancer
  selector:
    app: server
  ports:
    - port: 8080
      targetPort: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: server
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: server
            port:
              number: 8080

我认为先点击 Ingress,然后再点击 LoadBalancer 会导致一些重定向问题。我对这种情况的选择是一个简单的 ClusterIP,这个答案同意。如果集群上没有安装 MetalLB,LoadBalancer 在这里做什么? 可能需要这样的东西,但据我所知,负载均衡器本身就是集群外部的资源,即:云提供商负载均衡器。

标签: kubernetesload-balancingnginx-ingresskind

解决方案


如果集群上没有安装 MetalLB,LoadBalancer 在这里做什么?

MetalLB裸机Kubernetes集群的load-balancer实现。因此,如果您在裸机上,MetaLB 就会出现。

如果您处于托管状态,如果您在没有 MetalLB 的情况下提及YAML配置, LoadBalancer将自动创建。

LoadBalancer 在这里做什么?

由于它在 YAML 配置中提到,将为该服务创建 LoadBalancer。

是的,您可以使用ClusterIP而不是创建LoadBalancer服务。更改类型并从服务中删除。

理想的交通流量是这样的

Internet > LoadBalancer > Ingress > ingress controller (Backend) > service > deployment > Pods > container

是的,如果您使用任何托管,LB 是CloudProvider的资源。


推荐阅读