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
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
缓存 Kubernetes Docker
容器服务ACK常见问题之容器服务ACK ingress websocket配置失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
3月前
|
Kubernetes 负载均衡 应用服务中间件
kubernetes—Ingress详解
kubernetes—Ingress详解
74 0
|
4月前
|
Kubernetes 应用服务中间件 nginx
k8s ingress不生效的bug 解决了。
k8s ingress不生效的bug 解决了。
100 0
|
4月前
|
Kubernetes 负载均衡 应用服务中间件
k8s学习-Ingress(安装、模板、创建、删除)
k8s学习-Ingress(安装、模板、创建、删除)
101 0
|
6月前
|
Kubernetes 应用服务中间件 nginx
使用ingress暴露kubernetes集群内部的pod服务
使用ingress暴露kubernetes集群内部的pod服务
|
5月前
|
Kubernetes 应用服务中间件 API
5 分钟了解 Kubernetes Ingress 和 Gateway API
5 分钟了解 Kubernetes Ingress 和 Gateway API
124 0
|
6月前
|
Kubernetes 负载均衡 应用服务中间件
【K8S系列】第十三讲:Ingress详解
【K8S系列】第十三讲:Ingress详解
725 0
|
6月前
|
Kubernetes Cloud Native 应用服务中间件
【云原生】使用k8s创建nginx服务—通过ingress类型暴露
【云原生】使用k8s创建nginx服务—通过ingress类型暴露
|
7月前
|
Kubernetes 应用服务中间件 网络安全
用Kubernetes(k8s)的ingress部署https应用
用Kubernetes(k8s)的ingress部署https应用
217 0
|
6月前
|
存储 Kubernetes 负载均衡
【Kubernetes系统原理、核心资源、Pod原理与创建及生命周期管理、Job、Cronjob、Statefulset、Service负载均衡Ingress】
【Kubernetes系统原理、核心资源、Pod原理与创建及生命周期管理、Job、Cronjob、Statefulset、Service负载均衡Ingress】
356 2