之前我们在发布应用那一篇里,有一个简单的应用,我们拿那个来实现
应用就不重新发布了,我们对 service 做些调整
apiVersion: v1
kind: Service # 类型为 service
metadata:
name: k8s-app-ingress # 名称重新定义
spec:
selector:
app: k8s-app # 还是指定原先创建好的容器名称
# 注意这里,原先的 service 我们定义了 type 为 NodePort
# 它的缺点
# 每个端口只能是一种服务
# 端口范围只能是 30000-32767
# 现在这里可以不用定义,默认他会是 ClusterIP
# type: NodePort
ports:
- name: web
port: 80
protocol: TCP
再定义 traefit 的路由 services
这个怎么理解,也就是说外部访问到来时
1,先经过traefit的路由
2,再通过路由找到应用的服务
3,最终到达应用
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute # 类型为路由
metadata:
name: k8s-app-ingress-route # 定义名称
namespace: default
spec:
entryPoints:
- web
routes:
- match: Host(`k8s.app.com`) # 转发到域名,同时可以映射路径 && PathPrefix(`/notls`)
kind: Rule
services:
- name: k8s-app-ingress # 这就是前面创建的 service,要绑定对应上
port: 80
发布路由配置
$ kubectl apply -f k8s-app-ingress-route.yml
ingressroute.traefik.containo.us/k8s-app-ingress-route created
然后在 traefid 的管理后台,我们看到了很清晰的流程演示
这已经很直观的表达了访问的顺序
用户通过访问 traefik 作为负载的 web 端,经过路由,到达指定的服务
现在,有了这些服务之后,我们来实现我们想要的效果
请求:http://k8s.app.com 访问到应用, 端口不用指定,默认是80,然后还能负载均衡的去调度多个容器
首先我们先为这个域名“k8s.app.com"做个nginx的反向代理
注意这个域名,是前面在 k8s-app-ingress-route.yml 中指定的