我的Kubernetes基础架构中是否需要在Ingress之前拥有负载均衡器

时间:2018-10-19 12:29:20

标签: docker kubernetes kubectl kubernetes-ingress nginx-ingress

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

Ingress -> Service -> Deployment

我不确定为什么我的Ingress无法正常工作。我使用https://github.com/kubernetes/ingress-nginx作为我的Ingress Controller。我还从https://kubernetes.github.io/ingress-nginx/deploy/

应用了Bare-metal Service配置

下面是我简单的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

谢谢。

2 个答案:

答案 0 :(得分:1)

访问选项:

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

外部负载平衡器(可选)-> nodeport类型的服务-> Deploymenet

  • 使用入口
  

外部负载平衡器(可选)->入口->服务(clusterIP)-> Deploymenet

在这种情况下,您可以通过以下方法进行测试:首先使用nodeport并直接访问它,然后运行(如果可行),然后使用clusterIp并将其卷曲在集群中以确保它在端口80上运行,然后将其公开如果您想使用入口。还要调试和描述入口服务。

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

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

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

答案 1 :(得分:0)

您有很多选择可以公开您的服务。我建议使用metallb,它允许您使用LoadBalancer公开服务。使用ClusterIP,该服务不会暴露给外界,有关详细信息,请参见Publishing services - service types。 入口不是强制性的,但没有入口,则只能有一个服务+端口/ IP地址,而入口则允许您具有基于名称或/和基于路径的路由。