Ingress 的功能其实很容易理解:所谓 Ingress,就是 Service 的“Service”,代理不同后端 Service 而设置的负载均衡服务。

一、安装ingress

1.查找ingress安装文件

从github上查看ingress对应k8s版本的deploy文件,链接地址是:

https://github.com/kubernetes/ingress-nginx/tree/main/deploy/static/provider/baremetal

2.点击Raw按钮可得到该文件的url链接

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

3.在master节点上下载该文件

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/baremetal/1.21/deploy.yaml

4.更改文件名

mv deploy.yaml ingress-nginx.yaml

5.替换镜像

由于国内访问不了谷歌,需要更改ingress-nginx.yaml文件中的镜像,从docker hub上搜索相关镜像进行替换

k8s.gcr.io/ingress-nginx/controller:v1.1.2@sha256:28b11ce69e57843de44e3db6413e98d09de0f6688e33d4bd384002a44f7
8405c 替换成 liangjw/ingress-nginx-controller:v1.1.2 k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a
91b20cc67868660 替换成 liangjw/kube-webhook-certgen:v1.1.1

6.创建nginx ingress

kubectl apply -f ingress-nginx.yaml

7.查看资源

kubectl get pod,svc -n ingress-nginx

8.在集群外通过集群内任意一台节点的IP+Port就可以访问

由于还没有配置被代理的服务,所以返回404

二、配置

1.参考前面的章节部署nginx的deploy与service

服务名为:svc-nginx

2.配置ingress

创建ingress-svc.yaml文件

vi ingress-svc.yaml

编写文件内容

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-demo
# 名称空间不要忘了
namespace: dev
spec:
ingressClassName: nginx
rules:
- host: "demo.k8s.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
# 代理的服务名称
name: svc-nginx
port:
# 服务端口
number: 8000

3.创建ingress对象

kubectl apply -f ingress-svc.yaml

4.查看ingress对象的信息

5.配置域名访问

在windows宿主机上找到hosts文件:

C:\Windows\System32\drivers\etc\hosts,

添加一条映射记录(从三台节点中任选一台的IP进行映射):

192.168.59.112 demo.k8s.com

然后通过该域名加上ingress controller服务自己暴露的端口就可以访问了,千万要注意不是你代理的服务的端口。如下图所示获取ingress服务的端口

在浏览器就可以访问被ingress代理的k8s服务了

三、路径重写

1.更新yaml文件

vi ingress-svc.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
# 加上此重写配置
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: ingress-demo
namespace: dev
spec:
ingressClassName: nginx
rules:
- host: "demo.k8s.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: svc-nginx
port:
number: 8000
- host: "demo2.k8s.com"
http:
paths:
- pathType: Prefix
path: "/nginx(/|$)(.*)"
backend:
service:
name: svc-nginx
port:
number: 8000

2.更新ingress对象

kubectl apply -f ingress-svc.yaml

3.查看ingress对象

4.配置域名

在windows宿主机上找到hosts文件:

C:\Windows\System32\drivers\etc\hosts,添加一条映射记录:

192.168.59.112 demo2.k8s.com

在浏览器中访问

四、限流配置

1.更新yaml文件

vi ingress-svc.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
# 加上此重写配置
nginx.ingress.kubernetes.io/rewrite-target: /$2
# 限流
nginx.ingress.kubernetes.io/limit-rps: "1"
name: ingress-demo
namespace: dev
spec:
ingressClassName: nginx
rules:
- host: "demo.k8s.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: svc-nginx
port:
number: 8000
- host: "demo2.k8s.com"
http:
paths:
- pathType: Prefix
path: "/nginx(/|$)(.*)"
backend:
service:
name: svc-nginx
port:
number: 8000

2.更新ingress对象

kubectl apply -f ingress-svc.yaml

3.测试

快速刷新访问会报异常,你可以自定义错误页面

五、总结

目前,Ingress 只能工作在七层,而 Service 只能工作在四层。所以当你想要在 Kubernetes 里为应用进行 TLS 配置等 HTTP 相关的操作时,都必须通过 Ingress 来进行。

k8s入门之Ingress(七)的更多相关文章

  1. K8s 入门

    中文文档:https://www.kubernetes.org.cn/kubernetes%E8%AE%BE%E8%AE%A1%E6%9E%B6%E6%9E%84 小结大白话 Portainer 挺好 ...

  2. k8s入门你至少需要会哪些

    body { margin: 0; overflow: auto; font: normal 14px Verdana; background: rgba(255, 255, 255, 1); pad ...

  3. k8s入门系列之guestbook快速部署

    k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...

  4. Docker入门教程(七)Docker API

    Docker入门教程(七)Docker API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第七篇,重点介绍了Docker Registry API和 ...

  5. k8s入门系列之扩展组件(一)DNS安装篇

    DNS (domain name system),提供域名解析服务,解决了难于记忆的IP地址问题,以更人性可读可记忆可标识的方式映射对应IP地址. Cluster DNS扩展插件用于支持k8s集群系统 ...

  6. k8s入门系列之集群安装篇

    关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...

  7. k8s 入门系列之集群安装篇

    关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...

  8. Photoshop入门教程(七):蒙版

    学习心得:蒙版在Photoshop中也是很常用的,学会使用蒙版,可以提高图像处理能力,并且可以保护原片不被破坏,建议多使用一些蒙版. 蒙板是灰度的,是将不同灰度色值转化为不同的透明度,并作用到它所在的 ...

  9. [转帖]在 k8s 中通过 Ingress 配置域名访问

    在 k8s 中通过 Ingress 配置域名访问 https://juejin.im/post/5db8da4b6fb9a0204520b310 在上篇文章中我们已经使用 k8s 部署了第一个应用,此 ...

随机推荐

  1. CF1404E Bricks (最大权独立集)

    考虑把答案进行转化,通过分矩形条,我们能去掉一些夹在#之间的边 那么答案= #个数 - 能去掉的边个数 但去掉是有限制的,同一个#格子的横边和竖边不能同时去掉 把边转化成点,限制变成边. 横竖边的点 ...

  2. RenderDoc图形调试器详细使用教程(基于DirectX11)

    前言 由于最近Visual Studio的图形调试器老是抽风,不得不寻找一个替代品了. 对于图形程序开发者来说,学会使用RenderDoc图形调试器可以帮助你全面了解渲染管线绑定的资源和运行状态,从而 ...

  3. cookie可设置哪些属性?httponly?

    chrome控制台的application下可查看: cookie name 字段为一个cookie的名称. value 字段为一个cookie的值. domain 字段为可以访问此cookie的域名 ...

  4. Servlet的会话机制?

    因为http协议是无状态协议,又称为一次性连接,所以webapp必须有一种机制 能够记住用户的一系列操作,并且唯一标示一个用户. Cookie: 又称为小饼干,实际就是使用一个短文本保存用户信息, 在 ...

  5. 什么时候使用session?什么时候使用application?

    application:程序全局变量对象,对每个用户每个页面都有效session:用户全局变量,对于该用户的所有操作过程都有效

  6. java中的函数式接口

    是什么?? 有且只有一个抽象方法的接口 场景: 适用于函数式编程场景(使用lambda表达式编程)的接口,函数式接口可以适用于lambda使用的接口. 只有确保接口中有且只有一个抽象方法,java中的 ...

  7. DASCTF Oct吉林工师web

    迷路的魔法少女 进入环境给出源码 <?php highlight_file('index.php'); extract($_GET); error_reporting(0); function ...

  8. stm32学习总结)—SPI-FLASH 实验 _

    SPI总线 SPI 简介 SPI 的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola 首先在其 MC68HCXX 系列处理器上 ...

  9. layui表单使用开关滑块和复选框,渲染后台数据方法

    提示:整个表格要在form标签内 定义开关模板 <div class="layui-form" lay-filter="layuiadmin-app-form-li ...

  10. Vue中获取元素宽高

    <div ref="init"></div> 写在 页面 方法 部分 这里的 offsetHeight 是返回元素的宽度(包括元素宽度.内边距和边框,不包括 ...