k8s学习--ingress详细解释与应用(nginx ingress controller))

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
.cn 域名,1个 12个月
简介: k8s学习--ingress详细解释与应用(nginx ingress controller))

@TOC


lngress简介

什么是 Ingress

Ingress 是 Kubernetes 中用于管理集群内服务暴露的 API 资源。它提供了 HTTP 和 HTTPS 路由功能,使外部流量能够访问集群内部的服务。通过定义 Ingress 资源,可以控制哪些外部请求能够访问集群中的哪些服务,以及如何路由这些请求。

Ingress 的用途

统一入口控制
Ingress 提供了一个统一的入口点,用于管理多个服务的访问和流量控制。

HTTP/HTTPS 路由
通过 Ingress,可以配置基于主机名和路径的路由规则,将外部请求定向到集群内部的服务。

SSL 终止
Ingress 可以配置 SSL 证书,用于加密和解密外部流量,从而确保数据传输的安全性。

负载均衡
通过 Ingress 控制器,可以实现对多实例服务的负载均衡,将请求分发到多个后端实例。

Ingress 的工作原理

Ingress 的工作原理涉及以下两个关键组件:

Ingress 资源
用户定义的 Kubernetes 资源,描述了主机名、路径和后端服务之间的映射关系。

Ingress 控制器
实现 Ingress 规则的实际组件。常见的 Ingress 控制器包括 NGINX、Traefik 和 HAProxy 等。控制器监控 Ingress 资源的变化,并相应地配置其代理服务器,以实现路由和流量管理。

Ingress 的工作流程

定义 Ingress 资源
用户创建 Ingress 资源,定义了主机名、路径和后端服务的映射。

Ingress 控制器监控
Ingress 控制器不断监控 Ingress 资源的变化。
配置代理服务器:
根据 Ingress 资源的定义,Ingress 控制器配置其代理服务器(如 NGINX)以匹配请求。

处理请求
当外部请求到达集群时,Ingress 控制器的代理服务器根据 Ingress 规则进行路由,将请求转发到相应的服务。

Ingress 的应用场景

多服务管理
适用于需要管理多个服务的环境,通过 Ingress 实现统一的入口控制。

基于域名的路由
在同一个集群中运行多个应用,通过不同的域名或子域名进行访问。

基于路径的路由
根据请求路径将流量路由到不同的服务,例如 /api 路径指向一个微服务,/web 路径指向另一个微服务。

SSL 终止
需要使用 HTTPS 加密流量的场景,通过 Ingress 配置 SSL 证书进行终止。

负载均衡
在多实例服务间进行负载均衡,以提高服务的可用性和扩展性。

应用

实验环境

虚拟机
Ip | 主机名 | cpu | 内存 | 硬盘
----- | ----- | --- | --- | ---
192.168.10.11 | master01 | 2cpu双核 | 4G | 100G
192.168.10.12 | worker01 | 2cpu双核 | 4G | 100G
192.168.10.13 | worker02 | 2cpu双核 | 4G | 100G
192.168.10.16| vm6 | 1cpu1核 | 1G | 20G

版本 centos7.9
已部署k8s-1.27
vm6 无需配置,测试使用

部署nginx ingress controller

1.安装metalLB

具体步骤详情作者上篇博客
链接: metalLB负载均衡器
这里不再过多描述

2.nginx ingress controller部署

下载并修改配置文件 需要vpn

curl -k https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/baremetal/deploy.yaml  -o deploy.yaml

修改文件

vim deploy.yaml

修改此行 type: NodePort
为 type: LoadBalancer

修改前
image.png

修改后
image.png

创建

kubectl apply -f deploy.yaml

稍等几分钟后查看 需要vpn,没有的话查看信息时会显示连接不到镜像仓库

kubectl -n ingress-nginx get pod

可以看到已经成功运行了
image.png

3.ingress 对象应用案例(基于名称的负载均衡)

ingress-http案例:基于名称的负载均衡

(1) 创建deployment控制器类型应用

vim nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: ingress-nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: c1
        image: nginx:1.20
        imagePullPolicy: IfNotPresent

应用YAML

kubectl apply -f nginx.yaml

验证pod

kubectl get pods -n ingress-nginx

在这里插入图片描述

(2) 创建service

vim nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: ingress-nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
app: nginx

应用YAML

vim nginx-service.yaml

查看service

kubectl get svc -n ingress-nginx

image.png

默认service类型是ClusterIP

(3) 创建ingress对象

vim ingress-nginx.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx                                #自定义ingress对象名称
  namespace: ingress-nginx
  annotations:                                    #注解,声明
    ingressclass.kubernetes.io/is-default-class: "true"        #ingress控制器由标记的class作为默认class
spec:
  ingressClassName: nginx                            #此处标记出ingressClass为nginx
  rules:
  - host: www.test.com                               # 自定义域名
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: nginx-service                     # 对应上面创建的service名称
            port:
              number: 80

应用YAML

kubectl apply -f ingress-nginx.yaml

验证ingress对象

kubectl get ingress -n ingress-nginx

image.png

描述查看ingress信息

kubectl describe ingress ingress-nginx -n ingress-nginx

image.png

kubectl get pods -o wide -n ingress-nginx

image.png

可以看到两个pod的IP正好对应ingress域名对应的IP
确认nginx-ingress-controller的podIP为192.168.10.240

(4) 模拟客户端访问

确认nginx-ingress-controller的podIP, 下面命令查询的结果为192.168.10.240

kubectl get svc -n ingress-nginx | grep ingress

image.png

在集群之外任一主机中添加上述域名与IP地址解析(模拟公网DNS)
这里是192.168.10.16

vim /etc/hosts
192.168.10.240 www.test.com

准备pod内容器运行的web主页
查看

kubectl get pods  -n ingress-nginx

image.png

进入容器添加html文件

kubectl -n ingress-nginx exec -it nginx-c9f79b6f4-9xdms -- bash
echo "ingress web1" > /usr/share/nginx/html/index.html
exit

第二个

kubectl -n ingress-nginx exec -it nginx-c9f79b6f4-jqwsx -- bash
echo "ingress web2" > /usr/share/nginx/html/index.html
exit

去集群外的主机上测试
image.png

注; 经过测试.1.24版本的k8s集群部署会出现错误
解决方法
链接: REK安装K8S后,Ingress-nginx一直状态为ContainerCreating

完成
如果对您有帮助可以关注一下

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
21小时前
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
|
21小时前
|
Kubernetes 监控 测试技术
k8s学习--基于Ingress-nginx实现灰度发布系统
k8s学习--基于Ingress-nginx实现灰度发布系统
k8s学习--基于Ingress-nginx实现灰度发布系统
|
21小时前
|
Kubernetes 固态存储 调度
k8s学习--如何控制pod调度的位置
k8s学习--如何控制pod调度的位置
|
21小时前
|
Kubernetes API 调度
k8s学习--pod的所有状态详解(图例展示)
k8s学习--pod的所有状态详解(图例展示)
|
21小时前
|
存储 Kubernetes 调度
k8s学习--k8s群集部署zookeeper应用及详细解释
k8s学习--k8s群集部署zookeeper应用及详细解释
|
21小时前
|
Kubernetes JavaScript 前端开发
k8s学习--chart包开发(创建chart包)
k8s学习--chart包开发(创建chart包)
|
21小时前
|
Kubernetes 监控 测试技术
k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案
k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案
|
18天前
|
缓存 前端开发 JavaScript
终极 Nginx 配置指南(全网最详细)
本文详细介绍了Nginx配置文件`nginx.conf`的基本结构及其优化方法。首先通过删除注释简化了原始配置,使其更易理解。接着,文章将`nginx.conf`分为全局块、events块和http块三部分进行详细解析,帮助读者更好地掌握其功能与配置。此外,还介绍了如何通过简单修改实现网站上线,并提供了Nginx的优化技巧,包括解决前端History模式下的404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离等。最后,附上了Nginx的基础命令,如安装、启动、重启和关闭等操作,方便读者实践应用。
214 84
终极 Nginx 配置指南(全网最详细)
|
7天前
|
JavaScript 应用服务中间件 开发工具
vue尚品汇商城项目-day07【53.nginx反向代理配置】
vue尚品汇商城项目-day07【53.nginx反向代理配置】
18 4
|
7天前
|
缓存 应用服务中间件 nginx
nginx如何配置?配置项都是什么意思?
nginx如何配置?配置项都是什么意思?
22 1
下一篇
无影云桌面