Azure AKS Loadbalancer使用同一IP上的服务为多个POD提供服务
我目前每个吊舱都有一个负载平衡器。在我的实例中,2个pod具有以下YAML定义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:
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我认为您应该阅读文档并理解幕后的逻辑。。否则,即使当您遇到异常时它仍在工作,您也无法修复它。。。