ingress 是如何访问到pod的呢?
1,ingress由ingress 控制器 和 规则组成。
2,ingress rule 负责找到对应的service,实现访问到pod。
我们知道service的表现形式为IP:PORT,即工作在第四层传输层(TCP/IP层),那么对于不同的URL地址经常对应用不同的后端服务或者虚拟服务器,
这些应用层的转发机制仅通过kubernetes的service机制是无法实现的,这种情况我么可以使用ingress策略定义和一个具体的ingress Controller,
两者结合实现一个完整的Ingress 负载均衡,这个负载均衡是基于nginx七层反向代理来实现的。
[root@centos7 demo]#
[root@centos7 demo]# cat ingress.yml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.ctnrs.com
http:
paths:
- path: /
backend:
serviceName: web
servicePort: 80
[root@centos7 demo]#
[root@centos7 demo]# kubectl get pods
NAME READY STATUS RESTARTS AGE
web-5c987b8447-kptld 1/1 Running 0 6d21h
web-5c987b8447-nwhcd 1/1 Running 0 4d14h
web-5c987b8447-qjpz4 1/1 Running 0 4d14h
[root@centos7 demo]#
[root@centos7 demo]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 12d
web NodePort 10.0.0.19 <none> 80:32045/TCP 4d14h
web-1 ClusterIP 10.0.0.15 <none> 80/TCP 2d15h
[root@centos7 demo]#
[root@centos7 demo]#
[root@centos7 demo]# kubectl apply -f ingress.yml
ingress.networking.k8s.io/example-ingress unchanged
[root@centos7 demo]#
[root@centos7 demo]# kubectl get ing
NAME HOSTS ADDRESS PORTS AGE
example-ingress example.ctnrs.com 80 20m
[root@centos7 demo]#
[root@centos7 demo]#
hosts 绑定:
192.168.0.11 example.ctnrs.com
ingress 控制器在哪个节点,就用哪个节点的IP,来绑定对应的域名。
浏览器访问:
example.ctnrs.com