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

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

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

kubesphere 安装ingress controller kubectl get ingress_Deployment

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的访问端口是不一致的,每次暗转随机分配的端口

如下查询这两个端口确实已经被使用了

kubesphere 安装ingress controller kubectl get ingress_运维_02

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: 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

kubesphere 安装ingress controller kubectl get ingress_Deployment_03

kubesphere 安装ingress controller kubectl get ingress_nginx_04

2、流量限制

可以增加流量限制,即访问流量过多,页面会提示503如下:

kubesphere 安装ingress controller kubectl get ingress_nginx_05

具体配置方法如下:

增加注解

kubesphere 安装ingress controller kubectl get ingress_docker_06

并把pathType设置成精确模式

kubesphere 安装ingress controller kubectl get ingress_kubernetes_07

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

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

kubesphere 安装ingress controller kubectl get ingress_kubernetes_08

kubesphere 安装ingress controller kubectl get ingress_Deployment_09

2、测试

kubesphere 安装ingress controller kubectl get ingress_Deployment_10


kubesphere 安装ingress controller kubectl get ingress_kubernetes_11

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

kubesphere 安装ingress controller kubectl get ingress_Deployment_12

3、查询ingress服务

kubesphere 安装ingress controller kubectl get ingress_docker_13

4、删除ingress服务

kubesphere 安装ingress controller kubectl get ingress_nginx_14

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

ing相当于时ingress的简写

kubesphere 安装ingress controller kubectl get ingress_运维_15