> 文章列表 > 轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

1、Ingress将所有Service统一网关入口

底层也是使用了nginx,所以使用Ingress才是整个项目的统一入口。

官网地址:https://kubernetes.github.io/ingress-nginx/

轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

1、安装
  • 先下载安装文件

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/baremetal/deploy.yaml

  • 文件修改镜像地址

vi deploy.yaml
将image的值改为如下值:
registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/ingress-nginx-controller:v0.46.0

  • 开始安装

kubectl apply -f deploy.yaml

  • 检查安装的结果

kubectl get pod,svc -n ingress-nginx

  • 查询外网访问地址
    轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

这时我们就能用机器ip加对应访问端口,即可在外网访问了,

注意:http和https的访问端口是不一致的,每次暗转随机分配的端口

如下查询这两个端口确实已经被使用了
轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

2、实战Ingress配置域名规则访问Service

原理:使用Ingress根据不同的域名进行转发到对应的Service上

1、部署两个Deployment类型应用

使用yaml文件形式部署两种应用并分别创建两个副本

kubectl apply -f hello-server.yamlkubectl apply -f nginx-demo.yaml

hello-server.yaml 内容如下

apiVersion: apps/v1
kind: Deployment
metadata:name: hello-server
spec:replicas: 2selector:matchLabels:app: hello-servertemplate:metadata:labels:app: hello-serverspec:containers:- name: hello-serverimage: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/hello-serverports:- containerPort: 9000

nginx-demo.yaml 内容如下

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx-demoname: nginx-demo
spec:replicas: 2selector:matchLabels:app: nginx-demotemplate:metadata:labels:app: nginx-demospec:containers:- image: nginxname: nginx
2、将两个Deployment应用分别统一Service

统一nginx-demo应用Service kubectl apply -f nginx-demo-service.yaml

apiVersion: v1
kind: Service
metadata:labels:app: nginx-demoname: nginx-demo
spec:selector:app: nginx-demoports:- port: 8000protocol: TCPtargetPort: 80

统一hello-server应用Service kubectl apply -f hello-server-service.yaml

apiVersion: v1
kind: Service
metadata:labels:app: hello-servername: hello-server
spec:selector:app: hello-serverports:- port: 8000protocol: TCPtargetPort: 9000
3、配置Ingress域名规则访问Service

执行命令 kubectl apply -f ingress.yaml,根据不同规则访问不同Service

apiVersion: networking.k8s.io/v1
kind: Ingress  
metadata:name: ingress-host-bar
spec:ingressClassName: nginxrules:- host: "hello.ingress.com"http:paths:- pathType: Prefixpath: "/"backend:service:name: hello-serverport:number: 8000- host: "demo.ingress.com"http:paths:- pathType: Prefixpath: "/nginx"backend:service:name: nginx-demoport:number: 8000

注意:path: “/nginx” # 把请求会转给下面的服务,下面的服务一定要能处理这个路径,不能处理就是404

这里配置了 hello.ingress.com 访问到 hello-server 的Service

demo.ingress.com 访问到 nginx-demo 的Service,并且路径必须有/nginx

1、path的路径配置支持重写

如下修改的航医就是重写了path路径,只要nginx后面的路径。例如页面访问http://demo.ingress.com:31750/nginx/index.html,则访问的路径会变成http://demo.ingress.com:31750/index.html
轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

2、流量限制

可以增加流量限制,即访问流量过多,页面会提示503如下:
轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

具体配置方法如下:

增加注解

轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

并把pathType设置成精确模式

轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

4、在浏览器测试
1、修改host

由于我使用虚拟机,所以我在ingress部署的机器上的需增加我们测试的host名,在我本机电脑上也需要加host,如下

轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

2、测试

轻松掌握k8s的kubectl使用命令行操作Ingress知识点03
轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

注意由于我们配置路径必须有/nginx,所以如果不加path会被ingress拦截,就会出现如下图,也是404但是为ingress抛出的,区别就是nginx是没有版本的。

轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

3、查询ingress服务

轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

4、删除ingress服务

轻松掌握k8s的kubectl使用命令行操作Ingress知识点03

5、进入运行中的ingress 修改配置内容

ing相当于时ingress的简写

轻松掌握k8s的kubectl使用命令行操作Ingress知识点03