Kubernetes实战(三十)-HTTP 7层路由机制(Ingress)

Kubernetes Ingress 资源对象,用于将不同URL的访问请求转发到后端不同的Service,以实现HTTP层的业务路由机制。Kubernetes使用一个Ingress策略定义和一个具体的Ingress Controller,Ingress Controller 基于 Ingress 规则将客户请求直接转发到 Service 对应的后端 Endpoint 上,两者结合并实现了一个完整的Ingress负载均衡器。

注:Ingress 路由机制会跳过 kube-proxy 的转发功能,kube-proxy 不再起作用。

1、转发到单个后端服务上

客户端到 Ingress Controller 的访问请求都将被转发到后端的唯一Service上,这种情况下 Ingress 无须定义任何 rule,内容如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
spec:
  backend:
    serviceName: myweb
    servicePort: 8080

2、转发同一域名下不同请求

同一域名下,不同的URL路径被转发到不同的服务上,内容如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
spec:
  rules:
  - host: mywebsite.com
    http:
      paths:
      - path: /web
        backend:
          serviceName: web-service
          servicePort: 8080
      - path: /api
        backend:
          serviceName: api-service
          servicePort: 8888

3、转发不同域名下不同请求

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80
  - host: bar.foo.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 80

4、不使用域名的转发规则

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
spec:
  rules:
  - http:
      paths:
      - path: /web
        backend:
          serviceName: web-service
          servicePort: 80

不使用域名转发规则时,将默认禁用非安全HTTP,强制启用HTTPS。可以在 Ingress 的定义中设置一个 annotation "ingress.kubernetes.io/ssl-redirect=false" 来关闭强制启用HTTPS的设置。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  labels:
    app: nginx-ingress
  name: nginx-ingress
  annotations:
    ingress.kubernetes.io/ssl-redirect: "false"  
spec:
  rules:
    http:
      paths:
      - path:/web
        backend: 
          serviceName: web-service
          servicePort: 8080
      - path: /api
        backend: 
          serviceName: api-service
          servicePort: 8888

5、TLS 证书配置

首先需要创建 Secret 资源指定 Key 和 证书,命令如下:

[root@master ~]# create secret tls nginx-ingress-ssl -n oas-dev \
–key=/etc/kubernetes/ssl/nginx-ingress-key.pem –cert=/etc/kubernetes/ssl/nginx-ingress.pem

上述证书和 key 创建方法参照前文,传送门如下:

Kubernetes实战(二十一)-CA证书制作

ingress.yaml 内容如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: oas-dev
spec:
  tls:
  - hosts:
    - foo.bar.com
    - bar.foo.com
    secretName: nginx-ingress-ssl
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /
        backend:
          serviceName: web-service
          servicePort: 80
  - host: bar.foo.com
    http:
      paths:
      - path: /
        backend:
          serviceName: api-service
          servicePort: 80

到此 HTTP 7层路由机制(Ingress)介绍完成。

你可能感兴趣的:(Kubernetes实战)