1、Ingress将所有Service统一网关入口
底层也是使用了nginx,所以使用Ingress才是整个项目的统一入口。
官网地址:https://kubernetes.github.io/ingress-nginx/
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
- 查询外网访问地址
这时我们就能用机器ip加对应访问端口,即可在外网访问了,
注意:http和https的访问端口是不一致的,每次暗转随机分配的端口
如下查询这两个端口确实已经被使用了
2、实战Ingress配置域名规则访问Service
原理:使用Ingress根据不同的域名进行转发到对应的Service上
1、部署两个Deployment类型应用
使用yaml文件形式部署两种应用并分别创建两个副本
kubectl apply -f hello-server.yaml
、kubectl apply -f nginx-demo.yaml
hello-server.yaml 内容如下
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-server
spec:
replicas: 2
selector:
matchLabels:
app: hello-server
template:
metadata:
labels:
app: hello-server
spec:
containers:
- name: hello-server
image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/hello-server
ports:
- containerPort: 9000
nginx-demo.yaml 内容如下
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-demo
name: nginx-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
spec:
containers:
- image: nginx
name: nginx
2、将两个Deployment应用分别统一Service
统一nginx-demo应用Service kubectl apply -f nginx-demo-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-demo
name: nginx-demo
spec:
selector:
app: nginx-demo
ports:
- port: 8000
protocol: TCP
targetPort: 80
统一hello-server应用Service kubectl apply -f hello-server-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: hello-server
name: hello-server
spec:
selector:
app: hello-server
ports:
- port: 8000
protocol: TCP
targetPort: 9000
3、配置Ingress域名规则访问Service
执行命令 kubectl apply -f ingress.yaml
,根据不同规则访问不同Service
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-host-bar
spec:
ingressClassName: nginx
rules:
- host: "hello.ingress.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: hello-server
port:
number: 8000
- host: "demo.ingress.com"
http:
paths:
- pathType: Prefix
path: "/nginx"
backend:
service:
name: nginx-demo
port:
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
2、流量限制
可以增加流量限制,即访问流量过多,页面会提示503如下:
具体配置方法如下:
增加注解
并把pathType设置成精确模式
4、在浏览器测试
1、修改host
由于我使用虚拟机,所以我在ingress部署的机器上的需增加我们测试的host名,在我本机电脑上也需要加host,如下
2、测试
注意由于我们配置路径必须有/nginx,所以如果不加path会被ingress拦截,就会出现如下图,也是404但是为ingress抛出的,区别就是nginx是没有版本的。
3、查询ingress服务
4、删除ingress服务
5、进入运行中的ingress 修改配置内容
ing相当于时ingress的简写