CKA [Networking] – Ingress的使用

根据以上的架构图,我们使用service来创建load balancer,那么如果我们有多个service就需要创建多个LoadBalancer 这会费用很高,而且会有资源的浪费。因为一定每个LoadBalancer的使用量都会那么高。由于有以上的问题,所有我们才需要用到 Ingress。

Ingress 能够只需创建1个LoadBalancer就能够根于不通用的web domain 导流到不同的service当中, 那么就是复用LoadBalancer。

当我们在安装ingress的时候,ingress 会创建1个Ingress 管理的Service Load Balancer 和一个Ingress Controller Pod

外部流量 → NodePort → ClusterIP → Pod

流量的flow就是,一开始流量来到了Ingress managed service load balancer ,然后流量就导到了ingress controller pod, ingress controller 才根据我们set的 ingress 规则把流量导到相对应的service , service 再把流量导到pod。换句话说如果 Ingress Controller down的话,那么流量导流就出问题了。

流量的详细解释

1. 我们获取了ingress managed 的service load balancer 对外的IP是68.183.244.157,当流量访问了这个External IP之后,根据外面不同的Port 分别是80或443 就导到NodePort当中 30193或30889

2. 接着NodePort就把流量导到Cluster IP, 最后才把流量导到 10.108.0.110的Pod当中

3. 10.108.0.110 这个IP 就是Ingress Controller的IP来的

使用案例

1. 使用命令行创建ingress, 根据这个命令行只是创建1个rule而已,当然如果需要创建多个rule的话,可以重复使用–rule的参数在同一个命令行内

rule是所有test.com/*的路径域名,都把流量导到test-nodeport的80端口, 使用test-cert的ssl证书

kubectl create ingress test-ingress --rule="test.com/*=test-nodeport:80,tls=test-cert" --dry-run=client -o yaml

2. 也能够使用命令行输出yaml

kubectl create ingress test-ingress --rule="test.com/*=test-nodeport:80,tls=test-cert" --dry-run=client -o yaml > ingress.yaml

3.根于以下的案例,由于ingress连接到的service是不存在的,所以当describe查看ingress详情的时候会看到报错:services “test-nodeport2” not found

Loading

Facebook评论