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. You Don't Know JS Yet Book 1 Notes

    Get Started - 前言 But let me be clear: I don't think it's possible to ever fully know JS. That's not ...

  2. Spring Boot 多模块项目创建与配置 (转)

    转载:https://www.cnblogs.com/MaxElephant/p/8205234.html 最近在负责的是一个比较复杂项目,模块很多,代码中的二级模块就有9个,部分二级模块下面还分了多 ...

  3. nacos底层原理

    Nacos   为什么选择NacosNacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Nacos 帮 ...

  4. 为MySQL加锁?

    在日常操作中,UPDATE.INSERT.DELETE InnoDB会自动给涉及的数据集加排他锁,一般的 SELECT 一般是不加任何锁的.我们可以使用以下方式显示的为 SELECT 加锁. 共享锁: ...

  5. Mysql的索引及优化

    一:四种存储引擎: mysql使用 show engines查询其存储引擎: 功  能 MYISAM Memory InnoDB Archive 存储限制 256TB RAM 64TB None 支持 ...

  6. We're sorry but demo3 doesn't work properly without JavaScript enabled. Please enable it to continue.

    今天遇到一个问题为 vue请求得到的响应为 We're sorry but demo3 doesn't work properly without JavaScript enabled. Please ...

  7. Less使用@import进行Mixins

    Import 指令 从其他样式表导入样式 在标准CSS中,@ import at-rules必须在所有其他类型的规则之前.但Less.js并不关心你放置@import语句的位置 Example: .f ...

  8. 学习Apache(六)

    Apache 是一款使用量排名第一的 web 服务器,LAMP 中的 A 指的就是它.由于其开源.稳定.安全等特性而被广泛使用.下边记录了使用 Apache 以来经常用到的功能,做此梳理,作为日常运维 ...

  9. resin服务之一---安装及部署

    参考网站: http://caucho.com/ http://www.oschina.net/p/resin http://caucho.com/resin-4.0/admin/starting-r ...

  10. 单片机ram和rom的区别

    单片机运行时需要调用某个程序/函数/固定数据时就需要读取ROM,然后在RAM中执行这些程序/函数的功能,所产生的临时数据也都存在RAM内,断电后这些临时数据就丢失了.ROM:(Read Only Me ...