十一 【Kubernetes】K8s笔记:Ingress 集群进出流量总管( 四 )

有了 Ingress Controller,这些 API 对象的关联就更复杂了 。然后我们创建对象:
$ kubectl apply -f ngx-ing-dep.yamldeployment.apps/ngx-ing-dep created注意 Ingress Controller 位于名字空间 nginx-ingress,所以查看状态需要用 -n 参数显式指定,否则我们只能看到 default 名字空间里的 Pod:
$ kubectl get deploy -n nginx-ingressNAMEREADYUP-TO-DATEAVAILABLEAGEngx-ing-dep1/11110m$ kubectl get pod -n nginx-ingressNAMEREADYSTATUSRESTARTSAGEngx-ing-dep-7c48c74865-vzmnf1/1Running011m现在 Ingress Controller 就算是运行起来了 。还有最后一道工序,因为 Ingress Controller 本身也是一个 Pod,想要向外提供服务还是要依赖于 Service 对象 。所以至少还要再为它定义一个 Service,使用 NodePort 或者 LoadBalancer 暴露端口,才能真正把集群的内外流量打通 。
这里还有个取巧的办法,使用 kubectl port-forward 直接把本地的端口映射到 Kubernetes 集群的某个 Pod 里,在测试验证的时候非常方便 。
$ kubectl port-forward -n nginx-ingress ngx-ing-dep-7c48c74865-vzmnf 8080:80 &可以修改 /etc/hosts 来手工添加域名解析,也可以使用 --resolve 参数,指定域名的解析规则,比如在这里把 ngx.test 强制解析到 127.0.0.1,也就是被 kubectl port-forward 转发的本地地址 。
和 Service 一样,Ingress 把请求转发到了集群内部的 Pod,但 Ingress 的路由规则不再是 IP 地址,而是 HTTP 协议里的域名、URI 等要素 。
再补充一点,目前的 Kubernetes 流量管理功能主要集中在 Ingress Controller 上,已经远不止于管理“入口流量”了,它还能管理“出口流量”,也就是 egress,甚至还可以管理集群内部服务之间的“东西向流量” 。此外,Ingress Controller 通常还有很多的其他功能,比如 TLS 终止、网络应用防火墙、限流限速、流量拆分、身份认证、访问控制等等,完全可以认为它是一个全功能的反向代理或者网关 。
【十一 【Kubernetes】K8s笔记:Ingress 集群进出流量总管】

经验总结扩展阅读