我创建了一个服务,每个服务都在创建一个新的负载均衡器,我不想为每个服务创建一个新的负载均衡器。为此,我找到了解决方案入口控制器,但它没有发生。
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
在此共享入口文档以定位可以重定向到多服务的多个服务。
使用它你可以访问像这样的服务
我将尝试用文字描述你需要的对象。
您无需为每个服务创建负载均衡器。当您使用入口控制器(如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转发到计算机上的本地端口。
有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"