Kubernetes 实战 Ingress 负载均衡

什么是Ingress?

通常情况下,service和pod仅可在集群内部网络中通过IP地址访问。所有到达边界路由器的流量或被丢弃或被转发到其他地方。从概念上讲,可能像下面这样:
在这里插入图片描述
Ingress是授权入站连接到达集群服务的规则集合。
Kubernetes 实战 Ingress 负载均衡_第1张图片
你可以给Ingress配置提供外部可访问的URL、负载均衡、SSL、基于名称的虚拟主机等。用户通过POST Ingress资源到API server的方式来请求ingress。 Ingress controller负责实现Ingress,通常使用负载平衡器,它还可以配置边界路由和其他前端,这有助于以HA方式处理流量。

前提添加链接描述

在使用Ingress resource之前,有必要先了解下面几件事情。Ingress是beta版本的resource,在kubernetes1.1之前还没有。你需要一个Ingress Controller来实现Ingress,单纯的创建一个Ingress没有任何意义。

GCE/GKE会在master节点上部署一个ingress controller。你可以在一个pod中部署任意个自定义的ingress controller。你必须正确地annotate每个ingress,比如 运行多个ingress controller 和 关闭glbc.

确定你已经阅读了Ingress controller的beta版本限制。在非GCE/GKE的环境中,你需要在pod中部署一个controller。

准备工作

Kubernetes 实战 通过deployment控制器 部署自己的应用程序
如何构建ingress-controller?
Kubernetes 如何创建ingress tls secret?

部署ingress

ingress.yml 地址

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: restapi
  annotations:
    kubernetes.io/ingres.class: "nginx" # 制定使用的代理类型
spec:
  rules:
  - host: restapi.test.com # 内网环境的测试,可以根据 云环境、自定义环境配置
    http:
      paths:
      - path: /swagger
        backend:
          serviceName: restapi
          servicePort: 8080
# tls 为自签名证书 
  tls:
  - hosts: 
    - restapi.test.com
    secretName: rest-tls

使用kubectl 创建

   kubectl apply  -f ingress.yml

使用rancer 创建ingress:
Kubernetes 实战 Ingress 负载均衡_第2张图片
使用kubectl 查看

> kubectl get ing -n restapi
NAME      HOSTS              ADDRESS          PORTS     AGE
restapi   restapi.test.com   172.31.189.102   80, 443   8m

使用 rancher 查看:
Kubernetes 实战 Ingress 负载均衡_第3张图片
使用kubectl 查看详情:

kubectl describe  ingress -n restapi
Name:             restapi
Namespace:        restapi
Address:          172.31.189.102
Default backend:  default-http-backend:80 ()
TLS:
  rest-tls terminates restapi.test.com
Rules:
  Host              Path  Backends
  ----              ----  --------
  restapi.test.com
                    /swagger   restapi:8080 ()
Annotations:
  field.cattle.io/publicEndpoints:                   [{"addresses":["172.31.189.102"],"port":443,"protocol":"HTTPS","serviceName":"restapi:restapi","ingressName":"restapi:restapi","hostname":"restapi.test.com","path":"/swagger","allNodes":true}]
  kubectl.kubernetes.io/last-applied-configuration:  {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingres.class":"nginx"},"name":"restapi","namespace":"restapi"},"spec":{"rules":[{"host":"restapi.test.com","http":{"paths":[{"backend":{"serviceName":"restapi","servicePort":8080},"path":"/swagger"}]}}],"tls":[{"hosts":["restapi.test.com"],"secretName":"rest-tls"}]}}

  kubernetes.io/ingres.class:  nginx
Events:
  Type    Reason  Age              From                      Message
  ----    ------  ----             ----                      -------
  Normal  CREATE  10m              nginx-ingress-controller  Ingress restapi/restapi
  Normal  UPDATE  9m (x2 over 9m)  nginx-ingress-controller  Ingress restapi/restapi

你可能感兴趣的:(kubernetes)