Kubernetes对象(网络)之Ingress

来源:互联网 发布:区域合并算法 matlab 编辑:程序博客网 时间:2024/05/17 01:34
Kubernetes Ingress:
通常情况下,service和pod仅可在集群内部网络中通过IP地址访问。所有到达边界路由器的流量或被丢弃或被转发到其他地方。
Ingress是授权入站连接到达集群服务的规则集合。
可以给Ingress配置提供外部可访问的URL、负载均衡、SSL、基于名称的虚拟主机等。
用户通过POST Ingress资源到API server的方式来请求ingress。
Ingress controller负责实现Ingress,通常使用负载平衡器,它还可以配置边界路由和其他前端,这有助于以HA方式处理流量。


先决条件:
你需要一个Ingress Controller来实现Ingress,单纯的创建一个Ingress没有任何意义。
GCE/GKE会在master节点上部署一个ingress controller。
你可以在一个pod中部署任意个自定义的ingress controller。
你必须正确地annotate每个ingress,比如 运行多个ingress controller 和 关闭glbc.


Ingress Controllers:
Ingress正常工作,集群中必须运行Ingress controller。 


Ingress类型:
单Service Ingress:
Kubernetes中已经存在一些概念可以暴露单个service,但是你仍然可以通过Ingress来实现,通过指定一个没有rule的默认backend的方式。
基于名称的虚拟主机:
Name-based的虚拟主机在同一个IP地址下拥有多个主机名。
TLS:
你可以通过指定包含TLS私钥和证书的secret来加密Ingress。
Ingress仅支持单个TLS端口443,并假定TLS termination。 


更新Ingress:
在一个修改过的ingress yaml文件上调用kubectl replace -f命令。
跨可用域故障:


未来计划:
多样化的HTTPS/TLS模型支持(如SNI,re-encryption)
通过声明来请求IP或者主机名
结合L4和L7 Ingress
更多的Ingress controller


替代方案:
你可以通过很多种方式暴露service而不必直接使用ingress:
使用Service.Type=LoadBalancer
使用Service.Type=NodePort
使用Port Proxy

部署一个Service loadbalancer 这允许你在多个service之间共享单个IP,并通过Service Annotations实现更高级的负载平衡。



内容整理自Kubernetes中文社区:https://www.kubernetes.org.cn/