安装部分-需要科学上网!
首先安装 helm
brew install helm
使用 helm 安装 ingress-nginx,运行:
helm upgrade --install ingress-nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx --namespace ingress-nginx --create-namespace
理解一些概念
Ingress 和 Ingress Controller 在 Kubernetes 集群中扮演着关键角色,负责将外部流量高效、灵活地路由到内部服务。
想象在国际机场的场景中:
Ingress 相当于机场的信息显示屏,显示各个航班的登机口信息(服务访问入口)。
乘客(客户端)根据显示屏上的信息找到前往特定目的地的登机口(服务路径)。
显示屏本身不控制航班调度,只是展示信息。
Ingress Controller 则类似于机场的地面指挥中心,它监控所有的航班信息(服务状态)和登机口变动,确保信息显示屏上的内容是最新的。当某个航班的登机口发生变化时,地面指挥系统会立刻更新信息显示屏的内容,保证乘客能顺利找到正确的登机口,即使飞机停靠位置变动也能迅速调整指示。
Ingress 设定了流量如何进入集群并路由到正确服务的规则,而 Ingress Controller 是执行者,负责依据这些规则动态调整实际的流量路由,确保外部请求能够准确无误地被送达至集群内的服务。
在 Kubernetes 中,直接通过 NodePort 类型的服务确实可以暴露应用,让外部流量直接访问到集群内的 Pod。
不过,这种方式相对简单,对于复杂的路由规则管理、TLS 终端、负载均衡等高级功能支持有限。
引入 Ingress 和 Ingress Controller 层,就像是在网络架构中添加了一个智能的网关或路由器。这不仅仅是一个简单的拦截层,更是一个策略执行层,它为集群提供了一套更加灵活和强大的流量管理机制。
通过定义 Ingress 规则,您可以指定基于主机名(域名)、URL 路径等条件来路由流量到不同的后端服务(Pod)。
这样,就可以在不影响应用部署的情况下,动态调整外部访问策略,实现更细粒度的访问控制和更高效的流量分配。
简而言之,Ingress
层的加入,使得对 Pod 的访问控制更加精细化和动态化,同时支持了诸如 SSL 终止、路径基于的路由、重定向等高级功能,从而提高了整体系统的可维护性和安全性。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wee-book-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx # 使用 Nginx 做基础中间间
rules: # 转发规则 当命中 ld.weebook.com/api/* 走的就是 we-book service 80 端口的pod
- host: ld.weebook.com
http:
paths:
- path: /
pathType: Prefix
backend:
service: # 指向已经启动的 service->metadata->name
name: we-book
port:
number: 80 # 指向 service 集群中暴露的端口
这里的 service 是 ClusterIP 这样就不能使用宿主机通过 ip 地址访问 pod 应用
在 Kubernetes 集群中,
ClusterIP
类型的 Service 提供了一个集群内部可访问的虚拟 IP 地址,允许集群内的 Pods 和其他组件通过这个 IP 和定义的端口互相通信。然而,直接从宿主机(集群外部或者说是集群节点本身,非 Pod 内部)访问
ClusterIP
服务通常是不行的,因为ClusterIP
地址只在集群的虚拟网络内有效。
只能通过 Ingress controller 来访问!
apiVersion: v1
kind: Service
metadata:
name: we-book
spec:
selector:
app: we-book
ports:
- protocol: TCP
port: 80
targetPort: 8888
nodePort: 30002
type: ClusterIP
第一个访问到的是 Nginx
第二个是通过nodePort 访问we book pod的应用,type: ClusterIP 所以访问不到
第三个,通过 Nginx host 解析到 集群内we book pod的应用
评论区