k8s的ingress-nginx可以通过只占用node的两个端口(分别是http和https)来发布多个服务,而nodePort类型的Service,有几个服务就需要占用node几个端口,不利于端口管理。所以今天我们就来安装ingress,并且发布两个服务。

环境

操作系统:CentOS7
软件:kubectl、kubeadm、kubelet均是1.21版本,安装步骤见CentOS7搭建k8s集群

目标

在一个域名(模拟我们只有一个域名)下发布两个web服务。架构如下:

为此,我们准备两个springboot服务,只有一个简单的接口

当访问/web1/contextpath时返回web1
当访问/web2/contextpath时返回web2

镜像准备

使用ingress-nginx:v0.48.1

#拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/kubernetes-fan/ingress-nginx:v0.48.1
#打标签,这里的标签是以后需要用到的
docker tag registry.cn-hangzhou.aliyuncs.com/kubernetes-fan/ingress-nginx:v0.48.1 k8s.gcr.io/ingress-nginx/controller:v0.48.1
#删除下载的阿里镜像
docker rmi registry.cn-hangzhou.aliyuncs.com/kubernetes-fan/ingress-nginx:v0.48.1

yaml文件下载和修改

yaml内容可直接粘贴这位老哥的基于K8S 1.21.2集群安装Ingress-Nginx 0.48.1
这个yaml已经做了修改。修改的内容就是ingress的镜像。把镜像的标签改成你自己的ingress镜像标签即可,因为在【镜像准备】那一步我们把ingress镜像标签改成了k8s.gcr.io/ingress-nginx/controller:v0.48.1,所以image就改成k8s.gcr.io/ingress-nginx/controller:v0.48.1。

将yaml文件命名deploy.yaml

安装

kubectl create -f deploy.yaml

检查

安装之后,会新建一个ingress-nginx的namespace

kubectl get svc -n ingress-nginx


可以看到新建了一个nodePort类型的svc,分别映射的http和https。集群外部的流量要从nodePort流入k8s集群。比如我们要访问web1就应该写
http://www.zcx.com:30080/web1/contextpath

构建web镜像

把我们的springboot打成镜像,
web1的镜像是ws1,svc是ws1-svc
web2的镜像是ws2。svc是ws2-svc
yaml文件如下,注意我们的端口是9090

apiVersion: apps/v1
kind: Deployment
metadata:name: ws1-deploynamespace: default
spec:replicas: 1selector:matchLabels:app: ws1template:metadata:labels:app: ws1spec:containers:- name: ws1image: ws1:latestimagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 9090
---
apiVersion: v1
kind: Service
metadata:name: ws1-svcnamespace: default
spec:type: ClusterIP  # 默认类型selector:app: ws1ports:- name: httpport: 9090targetPort: 9090---
apiVersion: apps/v1
kind: Deployment
metadata:name: ws2-deploynamespace: default
spec:replicas: 1selector:matchLabels:app: ws2template:metadata:labels:app: ws2spec:containers:- name: ws2image: ws2:latestimagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 9090
---
apiVersion: v1
kind: Service
metadata:name: ws2-svcnamespace: default
spec:type: ClusterIP  # 默认类型selector:app: ws2ports:- name: httpport: 9090targetPort: 9090

创建ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-httpannotations:
#    注意这里不要重写,否则会请求不到资源。重写就是把web1重写成 / 当然找不到资源
#    nginx.ingress.kubernetes.io/rewrite-target: /kubernetes.io/ingress.class: "nginx"namespace: default
spec:rules:- host: "www.zcx.com"http:paths:- path: /web1pathType: Prefixbackend:service:name: ws1-svcport:number: 9090- path: /web2pathType: Prefixbackend:service:name: ws2-svcport:number: 9090

DNS解析

要保证发起请求的主机能解析www.zcx.com这个域名,
把www.zcx.com配置成k8s集群下任意一台主机都行
如果你在虚拟机上测试,就把www.zcx.com配置到虚拟机的/etc/hosts下。


如果你在windows上测试,就把www.zcx.com配置到C:\Windows\System32\drivers\etc\hosts下

测试

在虚拟机上

curl www.zcx.com:30080/web1/contextpath
curl www.zcx.com:30080/web2/contextpath


在postman上

后记

手动指定nodePort端口
安装ingress-nginx时绑定的nodePort是随机的,可以修改yaml文件手动指定
修改Service部分,而不是Deployment部分

注意

因为没有用镜像仓库,所以要保证每个node上都有我们的ws1和ws2镜像哦

后续

现在我们用Deployment+NodePort的方式完成了一个ingress-nginx管理整个集群的服务,那如果这一个ingress-nginx不可用了怎么办,下一篇,我们使用DaemonSet+HostNetwork+nodeSelector的方式搭建多个ingress-nginx实例的高可用集群。

参考

基于K8S 1.21.2集群安装Ingress-Nginx 0.48.1
k8s ingress原理及ingress-nginx部署测试

k8s1.21 安装ingress-nginx相关推荐

  1. k8s 安装ingress nginx controller 并部署.net core ingress服务

    192.168.28.132 k8smaster 192.168.28.133 k8snode1 192.168.28.134 k8snode2 192.168.28.135 k8snode3 192 ...

  2. 网关流控利器:结合 AHAS 实现 Ingress/Nginx 流量控制

    作者:涂鸦 微服务的稳定性一直是开发者非常关注的话题.随着业务从单体架构向分布式架构演进以及部署方式的变化,服务之间的依赖关系变得越来越复杂,业务系统也面临着巨大的高可用挑战.应用高可用服务 AHAS ...

  3. 解决办法在安装完Nginx后服务启动失败

    在安装完Nginx后服务启动失败的解决办法 systemctl start nginx //启动服务 Job for nginx.service failed because the control ...

  4. nginx: [error] CreateFile() “D:\nginx-1.21.6/logs/nginx.pid“ failed (2: The system cannot find the

    问题描述 nginx: [error] CreateFile() "D:\nginx\nginx-1.21.6\nginx-1.21.6/logs/nginx.pid" faile ...

  5. Nginx学习笔记02——安装部署Nginx

    前期准备 VMware和CentOS7 安装VMware虚拟机,在VMware中安装CentOS7操作系统,我这边只提供Vmware和CentOS7的下载地址,网上有很多教程,一步一步跟着安装就行. ...

  6. 【Linux系列】安装配置Nginx

    [Linux 环境]安装配置Nginx 文章目录 [Linux 环境]安装配置Nginx 前言 一.Nginx是什么? 二.使用Nginx 1.安装nginx 2.配置Nginx 3.配置websoc ...

  7. Ubuntu环境下安装FastDFS+Nginx服务的流程

    step 1 : 准备材料 链接:https://pan.baidu.com/s/1_vGoqA-FJIHcYI5NJZAxuw 密码:67cu step 2: 安装fastdfscommon 2-1 ...

  8. Kubernetes Ingress Nginx使用

    在此我们不讲述如何部署ingress-controller,只演示如何使用ingress之nginx使用.主要演示如何使用ingress nginx实现我们nginx的多样化配置,从而达到使用ingr ...

  9. mysql数据库21_Mysql5.7.21安装文档

    Mysql5.7.21安装文档 发布时间:2020-06-27 13:59:56 来源:51CTO 阅读:946 作者:PengChonggui --1.创建用户组mysql,创建用户mysql并将其 ...

最新文章

  1. 目录服务技术介绍——ADSI(三)
  2. java sftpv3client_Ganymed SSH-2 for Java系列8之SFTPv3Client说明
  3. crosstool-ng 编译交叉工具链的常见错误及解决办法
  4. 再见,Navicat!这个IDEA的兄弟,真香!
  5. 实现MySQL高可用群集配置_配置高可用性的MySQL服务器负载均衡群集
  6. sohu读博——周忆清
  7. 如何计算虚拟化vcpu_首次公开:腾讯云虚拟化技术原理及可用性提升实践
  8. 第 7 章 使用filter过滤请求
  9. Linux系统下修改主机名(CentOS7)
  10. python组态软件开源_freescada开源wpf组态软件
  11. jquery div点击展开,点击收起,点击除了该div外任何地方,该div隐藏
  12. pycharm 安装JPype
  13. VNET原理与实现(1)
  14. UVALive 3713 Astronauts(2SAT)
  15. javaweb重定向——登录页面跳转到首页
  16. 计算机显示找不到gpedit,Win7系统gpedit.msc找不到的解决方法
  17. Android 补间动画及动画组合AnimationSet常用方法整理
  18. 【高等数学笔记】二元函数连续、可微、偏导数存在、偏导数连续、任意方向导数存在的关系
  19. Linux 最最最常用的命令
  20. 2014湖南农业大学ACM校赛

热门文章

  1. java将Unicode编码转换为汉字
  2. javaIO——PipedReader 和 PipedWriter 实现模拟即时聊天
  3. 天猫上线元宇宙艺术展,阿里领衔互联网巨头争相布局!
  4. STC89C52+SJA1000自收发程序记录
  5. PATB1013(C++)
  6. 2022年5月国产数据库大事记-墨天轮
  7. think python学习笔记(16)
  8. Xfce4和Python的安装 | AidLux入门操作②
  9. Linux红帽认证管理员(RHCAS)笔记(下)
  10. MCGS用脚本设置屏幕背光和声音