K8S 之 Ingress实现业务七层代理

一、Ingress作用

对于Kubernetes的Service,无论是Cluster-Ip和NodePort均是四层的负载,集群内的服务如何实现七层的负载均衡,这就需要借助于Ingress;Ingress-nginx是7层的负载均衡器 ,同时负责统一管理外部对k8s cluster中Service的请求。

二、部署Ingress

1、下载对应的yaml文件

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml

2、修改对应的位置

K8S  之  Ingress实现业务七层代理

3、创建ingress应用

K8S  之  Ingress实现业务七层代理

4、查看ingress创建的资源信息

K8S  之  Ingress实现业务七层代理

三、把当前myblog应用通过ingress发布(svc)对外访问

1、查看当前myblog 的svc

K8S  之  Ingress实现业务七层代理

2、编写ingress的yaml文件

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myblog
  namespace: kang                           #命名空间必须要与svc一致
spec:
  rules:
  - host: myblog.cedarhd.com          #对外发布的域名(等同于nginx多主机头)
    http:
      paths:
      - path: /                                       #匹配路径
        backend:
          serviceName: myblog             #上面图片svc对应的名称
          servicePort: 80                        #上面图片svc的端口

3、通过yaml文件,创建ingress规则

K8S  之  Ingress实现业务七层代理

4、从外部通过myblog.cedarhd.com访问

K8S  之  Ingress实现业务七层代理

四、基于以上情况,发布一个安全的访问协议

1、通过公司的购买的域名证书,新建securt

K8S  之  Ingress实现业务七层代理
#此方法保护私钥的敏感机密信息

2、创建发布htts的ingress规则

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myblog
  namespace: kang
spec:
  rules:
  - host: myblog.cedarhd.com
    http:
      paths:
      - path: /
        backend:
          serviceName: myblog
          servicePort: 80
  tls:
    - hosts:
      - myblog.cedarhd.com
      secretName: https-secret

3、创建secret与查看信息

K8S  之  Ingress实现业务七层代理

4、通过浏览器验证是否成功

K8S  之  Ingress实现业务七层代理

五、Ingress转发规则的使用技巧

1、多路径转发

#目标
myblog.luffy.com -> 192.168.136.10 -> /foo   service1:4200
                                      /bar   service2:8080
                                      /      myblog:80

#实现
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: simple-fanout-example
  namespace: luffy
spec:
  rules:
  - host: myblog.luffy.com
    http:
      paths:
      - path: /foo
        backend:
          serviceName: service1
          servicePort: 4200
      - path: /bar
        backend:
          serviceName: service2
          servicePort: 8080
      - path: /
        backend:
          serviceName: myblog
          servicePort: 80

2、URL重写

目标:

myblog.luffy.com -> 192.168.136.10 -> /foo/    myblog:80/admin/

实现:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
 name: rewrite-path
 namespace: luffy
 annotations:
   nginx.ingress.kubernetes.io/rewrite-target: /admin/$1
spec:
 rules:
 - host: myblog.luffy.com
   http:
     paths:
     - path: /foo/(.*)
       backend:
         serviceName: myblog
         servicePort: 80

猜你喜欢

转载自blog.51cto.com/12965094/2642533