Kubernetes:Ingress

简介: Kubernetes:Ingress

Ingress 是一组路由规则,公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。


Ingress 控制器是一组 pod,负责通过负载均衡器来解析 Ingress 路由规则,将请求转发到相应的服务。

1、安装 Ingress 控制器

安装 Igress 控制器,例如 Nginx ingress controller,这里以目前官网最新的 v1.5.1 版本为例,下载 deploy.yaml 配置文件(或直接拷贝到本地)。

修改配置文件

# 镜像地址修改为阿里云地址
 # kind: Deployment
 image: registry.aliyuncs.com/google_containers/nginx-ingress-controller:v1.5.1
 # kind: Job
 image: registry.aliyuncs.com/google_containers/kube-webhook-certgen:v20220916-gd32f8c343

设置默认 ingress controller

# 应用资源
 kubectl apply -f deploy.yaml
 # 编辑 nginx ingress controller 的 ingressclass
 kubectl edit -n ingress-nginx ingressclasses.networking.k8s.io nginx
 # 在 annotations 字段下方添加注解,设置为默认控制器
 annotations: 
   ingressclass.kubernetes.io/is-default-class: "true"

查看 Ingress 控制器

kubectl exec -n ingress-nginx -it pod/ingress-nginx-controller-6867494779-2k7ff -- bash
 bash-5.1$ cat nginx.conf

2、Ingress 扇出

一个扇出(fanout)配置根据请求的 HTTP URI 将来自同一 IP 地址的流量路由到多个 Service。


apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
   annotations:
     nginx.ingress.kubernetes.io/rewrite-target: "/$1"
   name: fanout-ingress
 spec:
   rules:
     - host: www.nick.com
       http:
         # 路径列表
         paths:
         # 路径
         - path: /svc2/(.*)$
           # 路径类型
           pathType: Prefix
           # 指定后端
           backend:
             service:
               name: mysvc2
               port:
                 number: 8082
         - path: /svc3/(.*)$
           pathType: Prefix
           backend:
             service:
               name: mysvc3
               port:
                 number: 8083

测试

kubectl apply -f fanout-ingress.yaml
 kubectl get -f fanout-ingress.yaml
 kubectl get -n ingress-nginx svc
 # 添加域名映射
 sudo vim /etc/hosts
 10.102.138.220 www.example.com
 curl http://www.nick.com/svc2/print/env
 curl http://www.nick.com/svc3/print/env

3、基于名称的虚拟托管

基于名称的虚拟主机支持将针对多个主机名的 HTTP 流量路由到同一 IP 地址上。


apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
   name: hostname-ingress
 spec:
   rules:
   - host: svc1.nick.com
     http:
       paths:
       - path: /
         pathType: Prefix
         backend:
           service:
             name: mysvc1
             port:
               number: 8081
   - host: svc2.nick.com
     http:
       paths:
       - path: /
         pathType: Prefix
         backend:
           service:
             name: mysvc2
             port:
               number: 8082

测试

kubectl apply -f hostname-ingress.yaml
 kubectl get -f hostname-ingress.yaml
 kubectl describe -f hostname-ingress.yaml
 # 添加域名映射
 sudo vim /etc/hosts
 10.102.138.220 svc1.nick.com
 10.102.138.220 svc2.nick.com
 # 访问测试
 curl http://svc1.nick.com/print/env
 curl http://svc2.nick.com/print/env

4、Ingress TLS

自签证书

# 创建公钥和相对应的私钥
 openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /tmp/fanouttls.key -out /tmp/fanouttls.crt -subj "/CN=https-www.nick.com/O=https-www.nick.com"

创建 secret

# 创建 secret
 kubectl create secret tls fanout-ingress-tls --cert=/tmp/fanouttls.crt --key=/tmp/fanouttls.key
 # 查看secret
 kubectl get secrets fanout-ingress-tls -o yaml

新建 Ingress

apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
   annotations:
     nginx.ingress.kubernetes.io/rewrite-target: "/$1"
   name: fanout-ingress
 spec:
   tls:
   - hosts:
     - https-www.nick.com
     secretName: fanout-ingress-tls
   rules:
     - host: https-www.nick.com
       http:
         paths:
         - path: /svc2/(.*)$
           pathType: Prefix
           backend:
             service:
               name: mysvc2
               port:
                 number: 8082
         - path: /svc3/(.*)$
           pathType: Prefix
           backend:
             service:
               name: mysvc3
               port:
                 number: 8083

测试:

# 添加域名映射
 sudo vim /etc/hosts
 # 访问
 curl https://https-www.nick.com/svc2/print/env --cacert /tmp/fanouttls.crt
 curl https://https-www.nick.com/svc3/print/env --cacert /tmp/fanouttls.crt
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes 应用服务中间件 nginx
Kubernetes上安装Metallb和Ingress并部署应用程序
Kubernetes上安装Metallb和Ingress并部署nginx应用程序,使用LoadBalancer类型的KubernetesService
818 119
|
Kubernetes 负载均衡 应用服务中间件
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
2198 1
|
10月前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
344 2
|
缓存 Kubernetes 负载均衡
在K8S中,ingress 有何作用?
在K8S中,ingress 有何作用?
|
Kubernetes 负载均衡 应用服务中间件
k8s学习--ingress详细解释与应用(nginx ingress controller))
k8s学习--ingress详细解释与应用(nginx ingress controller))
1897 0
|
Kubernetes 应用服务中间件 API
【Ingress 秘籍】集群进出流量的总管:揭秘 Kubernetes 中 Ingress 的终极奥秘!
【8月更文挑战第25天】Ingress是Kubernetes中用于管理HTTP与HTTPS流量进入集群的核心功能。作为集群内外通信的桥梁,Ingress通过定义规则将外部请求导向内部服务。本文详细介绍了Ingress的基本概念、配置方法及其实现方式。通过使用不同的Ingress控制器(如Nginx、Traefik等),用户可以根据需要选择最适合的方案。文中还提供了示例代码展示如何创建服务、部署应用及配置Ingress规则。
400 6
|
Kubernetes 负载均衡 应用服务中间件
在k8S中,ingress是什么?
在k8S中,ingress是什么?
|
API UED 开发者
超实用技巧大放送:彻底革新你的WinForms应用,从流畅动画到丝滑交互设计,全面解析如何在保证性能的同时大幅提升用户体验,让软件操作变得赏心悦目不再是梦!
【8月更文挑战第31天】在Windows平台上,使用WinForms框架开发应用程序时,如何在保持性能的同时提升用户界面的吸引力和响应性是一个常见挑战。本文探讨了在不牺牲性能的前提下实现流畅动画与交互设计的最佳实践,包括使用BackgroundWorker处理耗时任务、利用Timer控件创建简单动画,以及使用Graphics类绘制自定义图形。通过具体示例代码展示了这些技术的应用,帮助开发者显著改善用户体验,使应用程序更加吸引人和易于使用。
213 0
|
Kubernetes API 网络安全
在K8S中,ingress该如何使用?
在K8S中,ingress该如何使用?
|
Kubernetes 负载均衡 应用服务中间件
Kubernetes的Ingress
Kubernetes的Ingress
301 0
Kubernetes的Ingress

热门文章

最新文章

推荐镜像

更多