2、创建service
3、创建ingress
4、添加ingress主机的域名
5、域名测试,能够正常解析
6、正常访问服务
通过添加annotations: nginx.ingress.kubernetes.io/permanent-redirect : https://www.baidu.com , 可以重定向到百度
正常重定向
通过nginx.jack-yan.com/abc可以访问业务服务,通过rewrite实际访问的是nginx.jack-yan.com
翻译自官网文档 Kubernetes-Ingress管理对集群中的服务(通常是HTTP)的外部访问的API对象。Ingress可以提供负载平衡、SSL终端和基于名称的虚拟主机。
为清楚起见,本指南定义了以下术语:
ingress(在kubernetes v1.1时添加)暴露从集群外到集群内服务的 HTTP 或 HTTPS 路由。定义在 ingress 资源上的规则控制流量的路由。
一个 ingress 可以配置用于提供外部可访问的服务url、负载均衡流量、SSL终端和提供虚拟主机名配置。 ingress controller 负责实现(通常使用负载均衡器(loadbalancer))入口(ingress)。但是它也可以配置你的边缘路由器或额外的前端来帮助处理流量。
ingress 不暴露任何端口或协议。将HTTP和HTTPS之外的服务公开到因特网通常使用类型是NodePort或loadbalance的service。
一个最小的ingress示例:
和其他的kubernetes资源一样,ingress需要 apiVersion 、 kind 和 metadata 字段。
Ingress spec包含配置负载均衡器或代理服务器所需的所有信息。最重要的是,它包含一个针对所有传入请求匹配的规则列表。ingress资源只支持用于指导HTTP通信的规则
每一个HTTP规则包含以下信息:
默认后端通常配置在一个Ingress控制器中,该控制器将服务于任何与规范中的路径不匹配的请求。(404页面)
没有规则的ingress把所有的流量都转发到一个默认后端。默认后端通常是Ingress控制器的一个配置选项,并没有在Ingress资源中指定。
如果没有任何主机或路径匹配Ingress对象中的HTTP请求,则流量将路由到默认后端。
现有的Kubernetes概念允许您公开单个服务。您还可以通过指定一个没有规则的默认后端来对一个入口执行此 *** 作。
通过 kubectl apply -f <文件名>创建后,你可以看到:
其中107.178.254.228是入口控制器为满足该入口而分配的IP。
根据所请求的HTTP URI,扇出配置将流量从单个IP地址路由到多个服务。一个入口允许您将负载平衡器的数量保持到最小。例如,设置如下:
定义的ingress如下:
通过 kubectl apply -f <文件名>创建后:
只要服务(s1, s2)存在,Ingress控制器提供一个满足Ingress的特定于实现的负载均衡器。当它这样做时,您可以在address字段中看到负载均衡器的地址。
基于名称的虚拟主机支持将HTTP流量路由到同一IP地址的多个主机名。
下面的ingress告诉后台负载均衡器根据主机头路由请求。
如果您创建一个没有在规则中定义任何主机的Ingress资源,那么可以匹配到Ingress控制器IP地址的任何web流量,而不需要基于名称的虚拟主机。例如,下面的Ingress资源将把first.bar.com请求的流量路由到service1, second.foo.com路由到service2,将任何没有在request中定义主机名(即没有显示请求头)的流量路由到service3。
您可以通过指定包含TLS私钥和证书的秘密来保护ingress。目前,入口只支持一个TLS端口443,并假设TLS终端。如果一个入口中的TLS配置部分指定了不同的主机,那么它们将根据通过SNI TLS扩展指定的主机名在同一个端口上进行多路复用(前提是入口控制器支持SNI)。TLS密钥必须包含名为TLS的密钥。crt和tls。包含用于TLS的证书和私钥的密钥,例如:
在一个Ingress中引用这个 secret 将告诉Ingress控制器使用TLS保护从客户机到负载均衡器的通道。您需要确保您创建的TLS secret来自一个包含sslexample.foo.com CN的证书。
一个ingress controller 通过一些应用于所有入口的负载平衡策略设置来引导,例如负载平衡算法、后端权重方案等。更高级的负载平衡概念(例如持久会话、动态权重)还没有通过ingress公开。同样值得注意的是,尽管健康检查不是直接通过入口暴露的,但是在Kubernetes中也存在类似的概念,比如就绪探测,它允许您实现相同的最终结果。
转自 https://www.cnblogs.com/tchua/p/11174386.htmlIngress是kubernetes集群对外提供服务的一种方式.ingress部署相对比较简单,官方把相关资源配置文件,都已经集合到一个yml文件中(mandatory.yaml),镜像地址也修改为quay.io。
官方地址: https://github.com/kubernetes/ingress-nginx
Ingress Contronler 通过与 Kubernetes API 交互,动态的去感知集群中 Ingress 规则变化,然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段 Nginx 配置,再写到 Nginx-ingress-control的 Pod 里,这个 Ingress Contronler 的pod里面运行着一个nginx服务,控制器会把生成的nginx配置写入/etc/nginx.conf文件中,然后 reload 一下 使用配置生效。以此来达到域名分配置及动态更新的问题。
192.168.3.100 www.tchua.top
然后主机浏览器访问 http://www.tchua.top:31199 ,这里访问时需要加上svc映射到主机时随机产生的nodePort端口号。
上面我们只是解决了集群对外提供服务的功能,并没有对ingress进行高可用的部署,Ingress高可用,我们可以通过修改deployment的副本数来实现高可用,但是由于ingress承载着整个集群流量的接入,所以生产环境中,建议把ingress通过DaemonSet的方式部署集群中,而且该节点打上污点不允许业务pod进行调度,以避免业务应用与Ingress服务发生资源争抢。然后通过SLB把ingress节点主机添为后端服务器,进行流量转发。
修改参数如下:
这里我在2台master节点部署(生产环境不要使用master节点,应该部署在独立的节点上),因为我们采用DaemonSet的方式,所以我们需要对2个节点打标签以及容忍度。
这里直接使用上面创建的pod及对应svc测试即可,另外注意一点,因为我们创建的ingress-controller采用的时hostnetwork模式,所以无需在创建ingress-svc服务来把端口映射到节点主机上。
在win主机上直接解析,IP地址为k8s-master03/k8s-master02 任意节点ip即可,访问的时候也无需再加端口
备用镜像
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)