在进入我的 Kubernetes 基础设施之前,我是否需要一个负载均衡器

Do I require to have a Load Balancer before Ingress in my Kubernetes Infrastructure

我正在尝试在我的每个部署上实施 ClusterIP-Service。 仅供参考,我正在办公室自己的服务器上设置 kubernetes(出于某种原因未使用云)。之前能想到的是network/infrastructure:

Ingress -> Service -> Deployment

我不确定为什么我的 Ingress 没有按预期工作。我正在使用 https://github.com/kubernetes/ingress-nginx as my Ingress Controller. I also applied Bare-metal Service config from https://kubernetes.github.io/ingress-nginx/deploy/

下面是我的简单 Ingress 和 ClusterIP,例如:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: simpleweb-service
              servicePort: 80

---
apiVersion : v1
kind : Service
metadata:
  name: simpleweb-service
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80
  selector:
    component: web

我尝试访问 http://<server-internal-ip>:80 但连接被拒绝,而不是路由到我在特定服务中的应用程序。我上面做的任何事情都可能出错吗?

我需要像下面这样在 Ingress 之前有 LoadBalancer 吗? (哪个比较理想)

LoadBalancer -> Ingress -> Service -> Deployment

或者也许

LoadBalancer -> Service -> Deployment

提前致谢。

访问选项:

  • 使用 k8s 服务(clusterIP、nodeport、loadbalancer(在 aws、gcp 环境中))

External load balanacer (optional) ->Service of type nodeport -> Deploymenet

  • 使用入口

External load balanacer (optional) -> Ingress -> Service ( clusterIP)-> Deploymenet

在你的情况下,你可以先使用 nodeport 测试它并直接访问它,然后如果有效,然后使用 clusterIp,并在集群内卷曲它以确保它在端口上 运行 80 ,如果你想使用 ingress,则将其暴露在 ingress 上。同时调试和描述入口服务。

如果连接被拒绝,可能是端口有问题。

还要确保您为选择器使用了正确的标签。

文档: https://console.bluemix.net/docs/containers/cs_ingress.html#ingress

您有多种选择来公开您的服务。我建议 metallb, it allows you to expose services with LoadBalancer. With ClusterIP, the service is not exposed to the outside world, see Publishing services - service types 了解详情。 Ingress不是强制性的,但没有它,你只能有一个服务+端口/IP地址,而ingress允许你有名称或/和基于路径的路由。