kubernetes对象之Ingress
概述
向外网暴露集群内服务,以使客户端能够访问,有以下几种方法,本文重点描述Ingress。
LoadBalancer
LoadBalancer一般由云服务供应商提供或者用户自定义,运行在集群之外。在创建service时为其配置LoadBalancer相关参数,当从外网访问集群内servcie时,用户直接连接到LoadBalancer服务器,LoadBalancer服务器再将流量转发到集群内service。Loadbalancer配置及使用方法与各云服务供应商有关,本文不详细描述。
NodePort
这种方式要求集群中部分节点有被外网访问的能力。Kubernetes为每个NodePort类型的服务在集群中的每个节点上分配至少一个主机网络端口号。客户通过能被外网访问的节点IP加上节点端口的方式访问服务。大多数情况下不会通过这种方式向集群外暴露服务,原因有四。
其一:大多情况下,为了安全起见,集群中的节点位于完全内网环境中,不应该有被外网直接访问的能力。一般外网访问集群中的节点都是通过边界服务器如网关、跳板等,而这种边界服务器需要通过各种方式进行安全加固。
其二:如果集群内节点可以从外网直接访问的话,则会将集群内节点地址、服务名称、端口号等信息直接暴露在外,非常不安全。
其三:服务端口号一般由系统自动分配,并非固定,而服务名称也可能发生变更,此时外部客户端需要跟踪变更并修改,属于重试耦合。
其四:这种方式,每个服务至少向外网暴露一个端口号,当服务很多时不易于管理。
Ingress
Ingress不是某种产品、组件的名称,它应该是kubernetes向集群外暴露服务的一种思路、技术,用户完全可以根据这种思路提供自己的Ingress实现,当然kubernetes提供了默认Ingress实现还有其它第三方实现,一般无需自己开发。它的思路是这样的,首先在集群内运行一个服务或者pod也可以是容器,不管是什么它至少应该有一个外网可以访问的IP,至少向外网开放一个端口号,让它充当反向代理服务器。当外网想要访问集群内service时,只需访问这个反向代理服务器并指定相关参数,代理服务器根据请求参数并结合内部规则,将请求转发到service。这种思路与LoadBalancer的不同之处是它就位于集群内,而LoadBalancer位于集群外。与NodePort的不同之处是集群只向外暴露一个服务或者pod等,而NodePort是暴露全部service。
Kubernetes用nginx实现反向代理服务器,称为Ingress Controller,是pod类型资源。同时提供了Ingress类型对象,通过创建Ingress对象配置nginx反向代理服务器的转发规则。Nginx反向代理服务器收到来自外网的请求后,用请求的URL地址、请求头字段区别不同service,然后转发请求。
部署Ingress Controller
在Kubernetes中,Ingress Controller典型是pod类型资源,其部署方式与普通pod相同,通过Deployment、DaemonSet等副本控制器部署,其中更值推荐的是DaemonSet方式。Ingress Controller需要部署在具备连通外网能力的节点上,首先在目标节点打上Ingress Controller专用标签,然后在DaemonSet的配置文件中配置节点选择器选中此类标签,控制pod实例可以部署的节点,通过为节点增减相关标签控制Ingress Controller的pod实例个数。Ingress Controller一般占用两个节点主机端口,http用80,https用443。详细参考:这里。外网通过http://节点外网ip:80/...或者https://节点外网ip:80/...就可以访问内部服务了,当前首先需要创建Ingress对象配置访问策略。
创建Ingress对象
本节通过创建各种Ingress对象,展示Ingress的各种典型用法。
Single Service Ingress
配置文件:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
spec:
backend:
serviceName: testsvc
servicePort: 80
然后通过kubectl create -f
创建对象,这同创建一般对象并没有很多区别,前面已经多次提到过,这里不再详细描述
查看对象:
$ kubectl get ing
NAME RULE BACKEND ADDRESS
test-ingress - testsvc:80 107.178.254.228
以上配置中没有具体的rule,所以诸如http(s)
kubernetes对象之Ingress的更多相关文章
- Kubernetes对象之Service
系列目录 通过ReplicaSet来创建一组Pod来提供具有高可用性的服务.虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题: Pod IP仅仅是集群内可见的虚拟IP,外部无法访问. ...
- Kubernetes对象
Kubernetes对象 在之前的文章已经讲到了很多Kubernets对象,包括pod,service,deployment等等.Kubernets对象是一种持久化,表示集群状态的实体.它是一种声明式 ...
- Kubernetes 系列(三):Kubernetes使用Traefik Ingress暴露服务
一.Kubernetes 服务暴露介绍 从 kubernetes 1.2 版本开始,kubernetes提供了 Ingress 对象来实现对外暴露服务:到目前为止 kubernetes 总共有三种暴露 ...
- vivo 公司 Kubernetes 集群 Ingress 网关实践
文章转载自:https://mp.weixin.qq.com/s/qPqrJ3un1peeWgG9xO2m-Q 背景 vivo 人工智能计算平台小组从 2018 年底开始建设 AI 计算平台至今,已经 ...
- Kubernetes 对象管理的三种方式
Kubernetes 中文文档 1. Kubernetes 对象管理的三种方式对比 Kubernetes 中的对象管理方式,根据对象配置信息的位置不同可以分为两大类: 命令式:对象的参数通过命令指定 ...
- Kubernetes实战总结 - Ingress选型与应用
一.概述 Ingress 是对集群中服务的外部访问进行管理的 API 对象,可以提供负载均衡.SSL 终结和基于名称的虚拟托管. 典型的访问方式是 HTTP,用于将不同URL的访问请求转发到后端不同的 ...
- Kubernetes K8S之Ingress详解与示例
K8S之Ingress概述与说明,并详解Ingress常用示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C ...
- kubernetes系列09—Ingress控制器详解
本文收录在容器技术学习系列文章总目录 1.认识Ingress 1.1 什么是Ingress? 通常情况下,service和pod仅可在集群内部网络中通过IP地址访问.所有到达边界路由器的流量或被丢弃或 ...
- Kubernetes中的Ingress
Ingress是什么 Ingress :简单理解就是个规则定义:比如说某个域名对应某个 service,即当某个域名的请求进来时转发给某个 service;这个规则将与 Ingress Control ...
随机推荐
- 浅谈android反调试之轮询TracePid(解决方案是特色)
参考文章: 1. http://bbs.pediy.com/thread-207538.htm 2. http://www.wjdiankong.cn/android 需求: 常见的Android ...
- Agile工作方法
[工具] Slack https://slack.com/ 看板 https://trello.com/ 其他TBC
- [转] Makefile 基础 (4) —— Makefile 书写命令
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...
- TransactionProxyFactoryBean 配置问题
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- 使用 Spring Boot 2.0 + WebFlux 实现 RESTful API
概述 什么是 Spring WebFlux, 它是一种异步的, 非阻塞的, 支持背压(Back pressure)机制的Web 开发框架. 要深入了解 Spring WebFlux, 首先要了知道 R ...
- iis 配置 aspnet起始页
起始页配置:在default document上面加上路径就可以了,例如 /home/kickoffjob asp.net 关于起始页的一般设置: 1: 在web.config中,加入form认证: ...
- upper_bound()和lower_bound()
ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, la ...
- Java通过开启线程池实现多线程
计算1..100 和1...200 的和,使用线程池开启两个线程 调用Executors类的newFixedThreadPool方法参数是线程池容纳的线程数量 这里是2 返回的对象是 Executo ...
- kswapd0 进程 设置 swap
kswapd0是虚拟内存管理中,负责换页,说白了就是你的物理内存不够用了 现在的服务器,一般内存都很高,所有很少使用 swap 分区了 这时候考虑的两种处理办法 加大物理内存 或者 增加swap分 ...
- python学习之-- 生成唯一ID
以下以2种方法生成唯一ID def uuid_method(): """第一种方法""" import uuid return str(uu ...