ingress服务

user.default.svc.cluster.local是集群内部service的dns地址,集群外部想访问集群里面的service,可以通过LoadBalaner和NodePort。

LoadBalaner可以获得一个公网ip;NodePort在宿主机上开一个端口,访问这个端口会把报文实际的转发到集群内的service里。

但不是所有的k8s集群都可以获得公网ip,这个要看供应商是否支持,比如microk8s就拿不到公网ip,如果使用的阿里云或AWS, 公网ip资源是需要付费的。

如果通过LoadBalaner的方式,对外提供user和order服务,需要2个LoadBalaner,对应2个外网IP,

在DNS做域名解析的时候,一个域名只能对应一个ip,但这里有2个公网ip,所以这种情况怎么解决呢?

ingress本身也是k8s的一个service,根据subpath路由到user或order service,

启动order和user pod,

对应着2个service,通过selector找到对应的pod,

在u1 pod中访问user service,user是service名称,default是默认的命名空间。

创建一个ingress-nginx,这个service没有外网ip,因为是在本机启动的,如果在云服务商的k8s集群上会有一个公网ip。

好在有一个port可以访问这个ingress,让ingress service和user service和order service建立一个关联。

可以按照path进行服务的转发,

host是www.l6p.io这个是外部http请求在header中的host内容,其实就是网站的域名,

这个是nginx ingress的一个注释,接受到外部的请求比如是api/user/v1,但是转发给user service或order service,按照根目录进行转发,去掉请求中的子目录,

比如在pod中curl http://user.default,这里其实访问的是根目录,路径中并没有api/user/v1,这个注解就是要求nginx在进行转发的时候把路径后面的去掉。

在使用之前,先把假定的域名指向ingress service,没有外网ip,但有一个宿主机上的port,在hosts文件中配置

查看LoadBalancer端口是32680,

通过浏览器进行访问,

其实ingress nginx pod中启动了一个nginx服务,

通过yaml文件创建ingress资源的时候其实就是在ingress的pod里面的nginx里面配置了路由关系,动态的加入了 order和user这样的配置,再通过nginx反向代理的方式进行请求的转发。

猜你喜欢

转载自blog.csdn.net/qq_16485855/article/details/129181657