Kubernetes(二十一)Intergress

 
  • Ingress是什么?
    •  之前我们了解到NodePort、LoadBalancer两种方法可以让pod暴露给外部访问,并且通过NodePort我们需要提前规划端口,避免应用越来越来越多的时候变得端口难以分配管理;并且每一个service都会创建一个负载均衡服务,导致成本比较高。那么有没有一种可以提供全局负载均衡器呢?那么kubernetes采用ingress来实现。
    • ingress公开了从集群外部访问到集群内部serivced的http和https路由。路由流量由ingress资源上定义规则控制。
          internet
              |
         [ Ingress ]
         --|-----|--
         [ Services ]
       
    • Ingress不会公布任意端口或协议,将http和https以外的服务公开到internet时,通常使用service.Type=NodePort或者service.Type=LoadBalancer  
    • ingress通过URL、域名将请求转发到不同的service,支持tcp/UDP 4层、7层负责均衡。ingress是访问规则的集合,具体是由ingress Controller(ingress Controller是在node上运行) 实现Pod的负责均衡。    
  • 环境准备
  • Ingress HTTP
    • 准备simple-fanout-example.yaml
    • apiVersion: networking.k8s.io/v1beta1
      kind: Ingress
      metadata:
        name: simple-fanout-example
        annotations:
          nginx.ingress.kubernetes.io/rewrite-target: /
      spec:
        rules:
        - host: foo.bar.com #配置域名(域名记得解析到服务器)
          http:
            paths:
            - path: /foo
              backend:
                serviceName: service1 #service的名称
                servicePort: 4200 #clauster IP端口(应用的端口,例如nginx默认是8080)
            - path: /bar
              backend:
                serviceName: service2
                servicePort: 8080

    • kubectl apply -f simple-fanout-example.yaml #执行创建
    • kubectl get ingress #查看创建的ingress对象
    • 然后我们使用http://foo.bar.com/foo:4200 就可以访问服务了
  • Ingress HTTPS
    • 首先我们要准备好使用的ssl证书;自签或购买的都是可以的。我们使用自签方式进行演示
    • 自签证书教程 https://www.cnblogs.com/TSir/p/12213175.html 里面的域名替换成我们想要颁发的即可
    • 创建 tls.yaml
      apiVersion: v1
      kind: Secret
      metadata:
        name: testsecret-tls
        namespace: default
      data:
        tls.crt: foo.bar.com.pem
      tls.key: foo.bar.com-key .pem
      type: kubernetes.io/tls
    • kubectl get secert #查看我们创建的数字信息
    • 为simple-fanout-example.yaml设置证书
      apiVersion: networking.k8s.io/v1beta1
      kind: Ingress
      metadata:
        name: tls-example-ingress
      spec:
        tls:
        - hosts:
          - foo.bar.com
      secretName: testsecret-tls rules: - host: sslexample.foo.com http: paths: - path: / backend: serviceName: service1 servicePort: 80
    • 通过htts://foo.bar.com即可访问
  • Ingress 主要功能
    • 支持4层、7层负载均衡
    • 支持独定义service访问策略
    • 只支持基于域名的网站访问
    • 支持tls     
原文地址:https://www.cnblogs.com/TSir/p/12269691.html