首页 > 解决方案 > 在我的 Kubernetes 基础架构中的 Ingress 之前是否需要有负载均衡器

问题描述

我正在尝试在我的每个部署上实现 ClusterIP-Service。仅供参考,我正在办公室自己的服务器上设置 kubernetes(由于某种原因不使用云)。以前这里是我能想到的网络/基础设施:

Ingress -> Service -> Deployment

我不确定为什么我的 Ingress 不能按预期工作。我使用https://github.com/kubernetes/ingress-nginx作为我的入口控制器。我还应用了来自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,但连接被拒绝,而不是被路由到特定服务内的我的应用程序。我上面做的任何事情都可能出错吗?

我需要LoadBalancer像下面这样在 Ingress 之前拥有吗?(哪一个是理想的)

LoadBalancer -> Ingress -> Service -> Deployment

或者可能

LoadBalancer -> Service -> Deployment

提前致谢。

标签: dockerkuberneteskubectlkubernetes-ingressnginx-ingress

解决方案


您有许多选项可以公开您的服务。我建议使用 metallb,它允许您使用 LoadBalancer 公开服务。使用 ClusterIP,服务不会暴露给外界,详情请参阅发布服务 - 服务类型。Ingress 不是强制性的,但没有它,您只能拥有一个服务+端口/IP 地址,而 Ingress 允许您拥有基于名称或/和路径的路由。


推荐阅读