首页 > 其他 > 详细

认识ingress

时间:2020-08-20 09:29:25      阅读:61      评论:0      收藏:0      [点我收藏+]
作者:李毓

我们都知道,K8S中暴露service的一般有3种方式

  1. LB
  2. NodePort
  3. ingress

第一种方式一般是用在云上的,比如亚马逊云,第二种是自带的暴露方式,这两种方式存在两个问题:
第一,一个服务只能一个端口使用,端口需要提前规划,如果服务很多,那么管理端口会成为一件头疼的事情。
第二,只支持4层负载,对于业务的多样化要求,无法很好的满足。

所以就出现了第三种方式,ingress的出现就是为了解决前两种的不足之处的。

ingress分为两个组件,一个是ingress,一个是ingress-controller,其中ingress创建规则,ingress-controller负责部署

技术分享图片

从上图我们可以看出ingress通过service关联,并且由ingress-controller实现了负载均衡。优点是他很好的支持了TCP/UDP的4层和7层。

ingress-controller有很多种实现,我们这里采用官方维护的nginx控制器。

首先我们来github找到你需要的版本
https://github.com/kubernetes/ingress-nginx/releases

这里我们选择最新的2.11版本
https://github.com/kubernetes/ingress-nginx/archive/ingress-nginx-2.11.3.tar.gz

这个with-rbac.yaml有个坑,需要通过宿主机网络hostNetwork方式暴露出去,相比nodeport的话性能会更好一些,不知道为什么这个坑从来没被填上。我们在这个位置加上。

技术分享图片

还有一个坑爹的地方要改,官网已经说了,apiversion版本要对好。
把default-backend.yaml和with-rbac.yaml的apiversion改成apps/v1

技术分享图片

然后对这7个yaml文件apply一下

技术分享图片

然后创建一个service

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30112
  selector:
    app: nginx

技术分享图片

接下来创建ingress规则

---
# http
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: example.carp.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx
          servicePort: 80

---
# https
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: tls-example-ingress
spec:
  tls:
  - hosts:
    - sslexample.carp.com
    secretName: secret-tls
  rules:
    - host: sslexample.carp.com
      http:
        paths:
        - path: /
          backend:
            serviceName: nginx
            servicePort: 80

可以看到80和443端口已经起来了
技术分享图片

接着绑定本地hosts访问

192.168.1.106 example.carp.com

技术分享图片

这样ingress暴露就算完成了。

认识ingress

原文:https://blog.51cto.com/14783669/2521986

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!