点击领取2000元阿里云代金券,付款抵现金用,云服务器69元/年限时抢>>> 点击咨询成为阿里云VIP客户享永久折扣>>> 点击领取2860元腾讯云代金券,付款抵现金用,云服务器88元/年限时抢>>> 点击成为腾讯云VIP客户享永久折扣优惠>>> 点击进入华为云最新优惠活动现场>>> 点击成为华为云VIP客户享永久折扣优惠>>> 为什么需要IngressService是基于四层TCP和UDP协议转发的,而Ingress可以基于七层的HTTP和HTTPS协议转发,可以通过域名和路径做到更细粒度的划分,如下图所示。 图1 Ingress-Service
Ingress工作机制要想使用Ingress功能,必须在Kubernetes集群上安装Ingress Controller。Ingress Controller有很多种实现,最常见的就是Kubernetes官方维护的NGINX Ingress Controller;不同厂商通常有自己的实现,例如华为云CCE使用华为云弹性负载均衡服务ELB实现Ingress的七层负载均衡。 外部请求首先到达Ingress Controller,Ingress Controller根据Ingress的路由规则,查找到对应的Service,进而通过Endpoint查询到Pod的IP地址,然后将请求转发给Pod。 图2 Ingress工作机制
创建Ingress下面例子中,使用http协议,关联的后端Service为“nginx:8080”,使用ELB作为Ingress控制器(metadata.annotations字段都是指定使用哪个ELB实例),当访问“http://192.168.10.155:8080/test”时,流量转发“nginx:8080”对应的Service,从而将流量转发到对应Pod。
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: test-ingress annotations: kubernetes.io/ingress.class: cce kubernetes.io/elb.port: '8080' kubernetes.io/elb.ip: 192.168.10.155 kubernetes.io/elb.id: aa7cf5ec-7218-4c43-98d4-c36c0744667a spec: rules: - host: '' http: paths: - backend: serviceName: nginx servicePort: 8080 path: "/test" property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH Ingress中还可以设置外部域名,这样您就可以通过域名来访问到ELB,进而访问到后端服务。 域名访问依赖于域名解析,需要您将域名解析指向ELB实例的IP地址,例如您可以使用云解析服务 DNS来实现域名解析。 spec:
rules:
- host: www.example.com # 域名
http:
paths:
- path: /
backend:
serviceName: nginx
servicePort: 80
路由到多个服务Ingress可以同时路由到多个服务,配置如下所示。
spec: rules: - host: foo.bar.com # host地址 http: paths: - path: "/foo" backend: serviceName: s1 servicePort: 80 - path: "/bar" backend: serviceName: s2 servicePort: 80 父主题: Kubernetes网络
|