Azure AKS Loadbalancer使用同一IP上的服务为多个POD提供服务

Azure AKS Loadbalancer使用同一IP上的服务为多个POD提供服务,azure,kubernetes,kubernetes-ingress,azure-load-balancer,Azure,Kubernetes,Kubernetes Ingress,Azure Load Balancer,我目前每个吊舱都有一个负载平衡器。在我的实例中,2个pod具有以下YAML定义 apiVersion: v1 kind: Service metadata: name: service1 spec: ports: - name: https-service1 port: 6379 targetPort: 6379 selector: app: service1-consoleapp type: LoadBalancer apiVersion:

我目前每个吊舱都有一个负载平衡器。在我的实例中,2个pod具有以下YAML定义

apiVersion: v1
kind: Service
metadata:
  name: service1
spec:
  ports:
  - name: https-service1
    port: 6379
    targetPort: 6379
  selector:
       app: service1-consoleapp
  type: LoadBalancer

apiVersion: v1
kind: Service
metadata:
  name: service2
spec:
  ports:
  - name: https-service2
    port: 443
    targetPort: 443
  selector:
       app: service2-consoleapp
  type: LoadBalancer
当我应用上述2个yaml文件时,我将获得2个外部ip,然后使用它们在dns子域中配置我的A记录

service1.company.com=>service1控制台的外部ip 1

service2.company.com=>service2控制台的外部ip 2

有没有办法将YAML文件合并成一个文件,这样我只能使用一个IP地址而不是2个

此外,在ingress中,看起来您可以这样做,但不确定我如何处理“主机”需求

有人可以解释一下路由将如何工作,因为我不确定路径属性中应该包含哪些值

我是否仍能获得2个可用于填充dns子域的外部ip

 spec:
  rules:
  - host: service1.company.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 6379
        path: ??
  - host: service2.company.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 433
        path: ??
我要找的结果是如果我打字

service1.company.com:6379在我的浏览器中,然后我应该点击pod端点(service1 consoleapp),如果我键入

service2.company.com:443在我的浏览器中,然后我应该点击pod端点(service2 consoleapp)

其中service1.company.com和service2.company.com位于同一IP地址上


提前感谢。

您最好使用Microsoft文档-

来自文档:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
  - host: first.bar.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80
  - host: second.foo.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 80
  - http:
      paths:
      - backend:
          serviceName: service3
          servicePort: 80
入口控制器是一种软件,可提供反向 代理、可配置流量路由和TLS终端 库伯内特斯服务公司。Kubernetes入口资源用于 为单个Kubernete配置入口规则和路由 服务。使用入口控制器和入口规则,单个IP 地址可用于将流量路由到同一网络中的多个服务 库伯内特斯星系团

按照文档进行操作并设置入口

稍后,请按照评论中提供的@CSharpRocks进行操作

来自文档:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
  - host: first.bar.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80
  - host: second.foo.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 80
  - http:
      paths:
      - backend:
          serviceName: service3
          servicePort: 80
如果创建的入口资源中未定义任何主机 规则,然后将任何web流量发送到入口的IP地址 可以匹配控制器,而无需创建基于名称的虚拟主机 必需的

例如,以下入口资源将路由流量 请求将first.bar.com发送至service1,将second.foo.com发送至service2, 以及没有在中定义主机名的IP地址的任何通信量 请求(即,不提供请求头)到 服务3

Yaml示例:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
  - host: first.bar.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80
  - host: second.foo.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 80
  - http:
      paths:
      - backend:
          serviceName: service3
          servicePort: 80

更多关于。

您当前拥有的入口资源应该可以工作。完全删除
路径
部分。此外,您还需要在DNS中创建子域
service1.company.com
service2.company.com
和一条
记录
,以指向负载平衡器的IP

此loadBalancer将流量从外部路由到入口控制器吊舱,入口控制器将根据入口资源中定义的规则将流量转发到后端吊舱。
host
规则是这样工作的-如果HTTP请求具有
host
service1.company.com
ingress控制器将该请求发送到
service1
,如果具有
host
service2.company.com
ingress控制器将该请求发送到
service2


当您部署Nginx等入口控制器时,您需要创建一个
LoadBalancer
类型的服务。因此,您只有一个用于公开入口控制器吊舱的LoadBalancer。

您尝试过谷歌搜索“kubernetes ingress”吗?这是第一个结果,它显示了如何配置入口路由hi@CSharpRocks,这是我正在使用的引用,但我是否不理解“路径”引用,并且我是否仍然只会获得一个用于填充dns子域的外部IP?谢谢@Arghya,如果我理解正确,那么这个1 YAML文件应该可以实现这一点?apiVersion:v1种类:服务元数据:名称:IntegratedServices规范:规则:-主机:service1.company.com http:path:-后端:serviceName:service1 servicePort:6379-主机:service2.company.com http:path:-后端:serviceName:service2 servicePort:443类型:为了清晰起见,LoadBalancer将在YAMLHi@Arghya中没有“应用程序选择器”部分的情况下工作。我是否使用一个YAML(应用程序选择器指向入口控制器的服务)和定义入口控制器的第二个YAML?或者我可以像我之前的评论那样只定义一个YAML文件吗?@user3385105我认为您应该阅读文档并理解幕后的逻辑。。否则,即使当您遇到异常时它仍在工作,您也无法修复它。。。