k8s 用ingress暴露集群环境中的服务。

一、.集群暴露服务的方式有两种

1. 使用nodeport型的service暴露

    注意:无法使用kube-proxy的ipvs模型,只能使用iptable模型 

2.使用ingress资源暴露

   注意:ingress 只能调度暴露7层应用,特指http和https协议。

这里我们采用ingress-nginx软件暴露,而ingress常用的暴露软件有Ingress-nginx、HAproxy、Traefik...

要理解ingress,需要区分两个概念,ingress和ingress-controller:

    • ingress对象:
      指的是k8s中的一个api对象,一般用yaml配置。作用是定义请求如何转发到service的规则,可以理解为配置模板。
    • ingress-controller:
      具体实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发

简单来说,ingress-controller才是负责具体转发的组件,通过各种方式将它暴露在集群入口,外部对集群的请求流量会先到ingress-controller,而ingress对象是用来告诉ingress-controller该如何转发请求,比如哪些域名哪些path要转发到哪些服务等等。

二、ingress-controller和ingress部署

   1. 部署ingress-controller 

之前部署都是在 https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml 获取ingress-controller的yaml脚本,目前站点不能访问,因此直接去github 获取ingress

git clone https://github.com/nginxinc/kubernetes-ingress.git

修改nginx-ingress-controller.yaml

 vim ingress-nginx/docs/examples/static-ip/nginx-ingress-controller.yaml

配置文件比较多,这里只贴apiVersion的配置

具体修改方式可以参考https://segmentfault.com/a/1190000019908991

 

 

quay.io镜像可能比较慢,这里用阿里的镜像

 registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.25.0

 

 

然后创建 nginx-ingress-controller的pod

k8smaster#  kubectl apply -f ingress-nginx/docs/examples/static-ip/nginx-ingress-controller.yaml 

接着给node服务器贴标签

k8smaster# kubectl label nodes node1 custom/ingress-controller-ready=true

查看pod

k8smaster#  kubectl get pod -n ingress-nginx
NAME READY STATUS RESTARTS AGE
nginx-ingress-controller-h5cxf 1/1 Running 0 47m

检查部署情况

 k8smaster#  kubectl get daemonset -n ingress-nginx

NAME                              DESIRED  CURRENT  READY UP-TO-DATE AVAILABLE  NODE SELECTOR                                AGE
nginx-ingress-controller     1                1                   1         1                     1                 custom/ingress-controller-ready=true     3h13m

查询基本信息

 k8smaster# kubectl describe daemonset nginx-ingress-controller -n ingress-nginx

暴露nginx-controller

在node节点上查看nginx端口

 

 

 

2.配置ingress资源

vim ingress-nginx/docs/examples/static-ip/nginx-ingress.yaml

 

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
         name: ingress-nginx
spec:
   rules:
   - host: test.aaa.com                         #将此域名映射为你的服务

     http:
        paths:
        - path: /                                      #域名后的路径
          backend:
               serviceName: java-demo    #java-demo 是本地已有的service服务
               servicePort: 80

 

 

 kubectl apply -f nginx-ingress.yaml

最后配置hosts  将test.aaa.com 解析到node的ip

curl test.aaa.com

 

#参考链接

https://www.cnblogs.com/fanggege/p/11953688.html

https://www.cnblogs.com/songqingbo/articles/12487939.html

https://segmentfault.com/a/1190000019908991

https://github.com/kubernetes/ingress-nginx/blob/master/charts/ingress-nginx/templates/controller-daemonset.yaml

posted @ 2020-05-27 14:20  Drutor  阅读(1633)  评论(0编辑  收藏  举报