如何在一个入口控制器中实现多个服务?他们在docs中给出的一个是不可理解的

问题描述 投票:0回答:3

我创建了一个服务,每个服务都在创建一个新的负载均衡器,我不想为每个服务创建一个新的负载均衡器。为此,我找到了解决方案入口控制器,但它没有发生。

kubernetes kubernetes-ingress nginx-ingress
3个回答
1
投票
 apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ingress
      annotations:
        kubernetes.io/ingress.class: "nginx"
        certmanager.k8s.io/cluster-issuer: wordpress-prod
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      tls:
      - hosts:
        - test.test.com
        secretName: prod
      rules:
      - host: test.test.com
        http:
          paths:
          - path: /service-1
            backend:
              serviceName: service-1
              servicePort: 80
          - path: /service-2
            backend:
              serviceName: service-2
              servicePort: 5000

在此共享入口文档以定位可以重定向到多服务的多个服务。

使用它你可以访问像这样的服务

https://test.test.com/service-1

https://test.test.com/service-2


1
投票

我将尝试用文字描述你需要的对象。

您无需为每个服务创建负载均衡器。当您使用入口控制器(如nginx)时,入口控制器本身将是类型负载平衡器。您的所有其他服务都需要类似ClusterIP类型。

之后,您可以决定如何将ClusterIP服务与Nginx LoadBalancer链接:为每个服务创建一个入口,或者根据某些规则为每个服务创建一个入口(如上面帖子中的@harsh-manvar所示的路径)。

当您说“它没有发生”时,如果您能提供有关您的设置的详细信息,那将是一件好事。

为了使Nginx入口控制器工作,需要将其定义为NodePort或LoadBalancer服务类型。 nginx文档中提供的示例使用LoadBalancer。但是,LoadBalancer仅在您的群集支持此对象时有效(这意味着在大多数云提供程序(如AWS / GCP / Azure / DigitalOcean或较小版本的minikube)中运行)。另一方面,NodePort将在运行它的Kubernetes节点上公开入口控制器(当使用minikube时,这通常意味着需要端口转发才能访问的各种VM)。

要在本地环境中使用入口,您可以查看minikube。您只需要运行minikube addons enable ingress,它将为您部署一个nginx控制器。之后,您需要做的就是定义一个入口,根据您的设置,您可能需要使用kubectl port-forward将nginx控制器pod上的端口80转发到计算机上的本地端口。


0
投票

different types of services:ClusterIP,NodePort,LoadBalancer和ExternalName。您可以在spec.type中指定它。实际上,默认的一个,如果没有指定,不是LoadBalancer,而是ClusterIP,所以在你的情况下,只需要放弃type: LoadBalancer定义并在你的入口资源中使用serviceName作为后端。例:

spec:
  rules:
  - host: your.fully.qualified.host.name
    http:
      paths:
      - backend:
          serviceName: your-internal-service-name
          servicePort: 80
        path: /

请记住,对于某些云提供商,还可以使用没有公共IP的内部LoadBalancer。这是通过向服务配置添加注释来完成的。对于Azure AKS,它看起来像这样:

metadata:
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"

对于谷歌的GKE,注释是cloud.google.com/load-balancer-type: "Internal"

© www.soinside.com 2019 - 2024. All rights reserved.