十九、Service Ingress
Service Ingress


Ingress-Nginx github 地址:https://github.com/kubernetes/ingress-nginx
Ingress-Nginx 官方网站:https://kubernetes.github.io/ingress-nginx
部署 Ingress-Nginx
https://kubernetes.github.io/ingress-nginx/deploy/
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.0/deploy/static/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.0/deploy/static/provider/baremetal/service-nodeport.yaml
Ingress HTTP 代理访问
vim ingress-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
name: nginx
replicas: 2
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx
image: docker.io/nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
name: nginx
#-----------------------------# 分割线 #--------------------------------------#
vim ingress-nginx-svc.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-test
spec:
rules:
- host: aaa.zutuanxue.com
http:
paths:
- path: /
backend:
serviceName: nginx-svc
servicePort: 80
我们可以通过命令 kubectl get svc -n ingress-nginx 查看对外宣告的端口:

然后使用浏览器通过域名:http://aaa.zutuanxue.com:31363/ 进行访问,因为需要进行域名解析,记得现在 hosts 文件内添加我们使用的域名的解析:

通过 Ingress 实现虚拟主机:
vim ingress-nginx-1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-1
spec:
selector:
matchLabels:
name: nginx-1
replicas: 2
template:
metadata:
labels:
name: nginx-1
spec:
containers:
- name: nginx-1
image: docker.io/nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc-1
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
name: nginx-1
#-----------------------------# 分割线 #--------------------------------------#
vim ingress-nginx-2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-2
spec:
selector:
matchLabels:
name: nginx-2
replicas: 2
template:
metadata:
labels:
name: nginx-2
spec:
containers:
- name: nginx-2
image: docker.io/nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc-2
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
name: nginx-2
#-----------------------------# 分割线 #--------------------------------------#
vim ingress-nginx-svc-1.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-1
spec:
rules:
- host: bbb.zutuanxue.com
http:
paths:
- path: /
backend:
serviceName: nginx-svc-1
servicePort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-2
spec:
rules:
- host: ccc.zutuanxue.com
http:
paths:
- path: /
backend:
serviceName: nginx-svc-2
servicePort: 80
创建完成后,我们来查看下一下相关的信息:

为了区分,我们对 Pod 内的 index.html 文件进行了对应的修改,然后我们通过不同的域名进行访问:

Ingress HTTPS 代理访问
创建证书,以及 cert 存储方式:
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"
kubectl create secret tls tls-secret --key tls.key --cert tls.crt

创建deployment、Service、Ingress Yaml 文件:
vim ingress-nginx-3.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-3
spec:
selector:
matchLabels:
name: nginx-3
replicas: 2
template:
metadata:
labels:
name: nginx-3
spec:
containers:
- name: nginx-3
image: docker.io/nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc-3
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
name: nginx-3
#-----------------------------# 分割线 #--------------------------------------#
vim ingress-nginx-svc-2.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-3
spec:
tls:
- hosts:
- ddd.zutuanxue.com
secretName: tls-secret
rules:
- host: ddd.zutuanxue.com
http:
paths:
- path: /
backend:
serviceName: nginx-svc-3
servicePort: 80
创建完成后我们来查看一下效果:


Nginx 进行 BasicAuth
安装 httpd ,因为我们要使用相关的功能模块:
yum -y install httpd
htpasswd -c auth 用户名
kubectl create secret generic basic-auth --from-file=auth

创建 Ingress Yaml 文件:
vim ingress-nginx-svc-3.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-with-auth
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - tyschool'
spec:
rules:
- host: eee.zutuanxue.com
http:
paths:
- path: /
backend:
serviceName: nginx-svc
servicePort: 80
官方参考文档:https://kubernetes.github.io/ingress-nginx/examples/auth/basic/
创建完成后,我们来看一下相关的信息:

因为是重复使用的 aaa.zutuanxue.com 的信息,所以可以看到,域名是 “eee” 的,但是内容是 “aaa” 的。

Nginx 重定向:
| 名称 | 描述 | 值 |
|---|---|---|
| nginx.ingress.kubernetes.io/rewrite-target | 必须重定向流量的目标URI | 串 |
| nginx.ingress.kubernetes.io/ssl-redirect | 指示位置部分是否仅可访问SSL(当Ingress包含证书时默认为True) | 布尔 |
| nginx.ingress.kubernetes.io/force-ssl-redirect | 即使Ingress未启用TLS,也强制重定向到HTTPS | 布尔 |
| nginx.ingress.kubernetes.io/app-root | 定义Controller必须重定向的应用程序根,如果它在’/'上下文中 | 串 |
| nginx.ingress.kubernetes.io/use-regex | 指示Ingress上定义的路径是否使用正则表达式 | 布尔 |
vim rewrite-ingress-nginx-svc.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-rewrite
annotations:
nginx.ingress.kubernetes.io/rewrite-target: https://eee.zutuanxue.com:31434
spec:
rules:
- host: fff.zutuanxue.com
http:
paths:
- path: /
backend:
serviceName: nginx-svc
servicePort: 80
我们来看一下效果:

跳转到了:

十九、Service Ingress的更多相关文章
- Python之路【第十九篇】:爬虫
Python之路[第十九篇]:爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...
- WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]
原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...
- centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/index.php <<EOF重定向 shell的变量和函数命名不能有横杠 平台可以用arch命令,获取是i686还是x86_64 curl 下载 第三十九节课
centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/ind ...
- centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课
centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数 ...
- centos LAMP第一部分-环境搭建 Linux软件删除方式,mysql安装,apache,PHP,apache和php结合,phpinfo页面,ldd命令 第十九节课
centos LAMP第一部分-环境搭建 Linux软件删除方式,mysql安装,apache,PHP,apache和php结合,phpinfo页面,ldd命令 第十九节课 打命令之后可以输入: e ...
- service---七月十九号实验
目录 service---七月十九号实验 1 startService.bindService 2 分析生命周期变化 问题思考: service---七月十九号实验 1 startService.bi ...
- 学习笔记:CentOS7学习之十九:Linux网络管理技术
目录 学习笔记:CentOS7学习之十九:Linux网络管理技术 本文用于记录学习体会.心得,兼做笔记使用,方便以后复习总结.内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK ...
- Spring Boot 2.X(十九):集成 mybatis-plus 高效开发
前言 之前介绍了 SpringBoot 整合 Mybatis 实现数据库的增删改查操作,分别给出了 xml 和注解两种实现 mapper 接口的方式:虽然注解方式干掉了 xml 文件,但是使用起来并不 ...
- Flask 教程 第十九章:Docker容器上的部署
本文翻译自The Flask Mega-Tutorial Part XIX: Deployment on Docker Containers 这是Flask Mega-Tutorial系列的第十九部分 ...
随机推荐
- 深入理解Spring注解机制(一):注解的搜索与处理机制
前言 众所周知,spring 从 2.5 版本以后开始支持使用注解代替繁琐的 xml 配置,到了 springboot 更是全面拥抱了注解式配置.平时在使用的时候,点开一些常见的等注解,会发现往往在一 ...
- 解读Gartner2022年组装式应用报告:从组装式企业到组装式应用
摘要:"到2023年,采用组装式方法的组织在新特性交付速度比竞争对手快80%."Gartner 为什么未来的企业是组装式的? 物竞天择,适者生存,企业也是一样,在发展过程中,会为了 ...
- Vue3 组合式 API 中获取 DOM 节点的问题
模板引用 Vue 提供了许多指令让我们可以直接操作组件的模板.但是在某些情况下,我们仍然需要访问底层 DOM 元素.在模板中添加一个特殊的属性ref就可以得到该元素. 访问模板引用 <scrip ...
- html页面嵌套其他网站页面的方法
直接上代码:html页面嵌套其他网站页面的方法 <div> <!--第一种:使用object标签--> <object type="text/html" ...
- Ubuntu20.04配置 ES7.17.0集群
Ubuntu20.04配置 ES7.17.0集群 ES能做什么? elasticsearch简写es,es是一个高扩展.开源的全文检索和分析引擎,它可以准实时地快速存储.搜索.分析海量的数据. Ubu ...
- 解决:Error downloading packages: containerd.io-1.6.4-3.1.el7.x86_64: [Errno 256] No more mirrors to try.
问题描述: 今天在安装Docker-ce的时候,安装了半天最后提示下载出错还提示下载速度太慢. 报错如下: 下载软件包时出错:containerd.io-1.6.4-3.1.el7.x86_64:[E ...
- 第五十二篇:webpack的loader(三) -url-loader (图片的loader)
好家伙, 1.什么是base64? 图片的 base64 编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址. 这样做有什么意义呢?我们知道,我们所看到的网页上的每一个图片,都是需要 ...
- 【Traefik二次开发】中间件 Middleware 开发
本篇只讨论HTTP中间件 中间件定义 https://doc.traefik.io/traefik/middlewares/overview/ Attached to the routers, pie ...
- 【必知必会】手把手教你配置MySQL环境变量——图文详解
一.先决条件 假设我们已经成功安装MySQL数据库.如果还有小伙伴不知道如何安装MySQL数据库,可以在本文下留言,留言数超20,则出一期"手把手教你安装MySQL数据库--图文详解&quo ...
- 编译安装Erlang+RabbitMQ
楔子 由于国内信创越来越火,客户现场也开始使用国产操作系统替换CentOS之类的开源操作系统,最近做实施的同事找到我,说现场是ARM架构的操作系统编译安装RabbitMQ一直提示无法启动也没有日志文件 ...