码迷,mamicode.com
首页 > 其他好文 > 详细

认识ingress

时间:2020-08-26 17:17:24      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:net   name   deploy   res   访问   erp   nta   ports   图片   

作者:李毓

我们都知道,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

标签:net   name   deploy   res   访问   erp   nta   ports   图片   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!