k8s之ingress介绍与实施

目录

ingress是什么

k8s中ingress实施

1、ingress controller安装

2、使用

ingress切换宿主机ip

ingress定义

ingress是什么

首先,要来看传统k8s中service的NodePort存在的不足
1、一个端口只能一个服务使用,端口需要提前规划
2、只支持4层网络协议
四层(传输层):基于ip和端口转发的
七层(应用层):基于应用层协议转发,例如http、可以根据域名、url等转发
所以,使用ingress的话,他可以在集群中实现一个统一的负载均衡,在集群中提供一个访问入口,
其中,ingress分为ingress和ingress Controller
ingress: k8s中的一个抽象资源,给管理员提供一个暴露应用的入口定义方法
ingress Controller: 根据Ingress生成具体的路由规则,并对pod负载均衡
Ingress Controller有很多实现,我们这里采用官方维护的基于Nginx实现的控制器。

k8s中ingress实施

首先先下载实施yaml文件
 https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.3/deploy/static/provider/baremetal/deploy.yaml
ingress有两种部署方式,因为他本质上也是一个pod,所以他有两种暴露方式,第一种。pod创建,用service在对他进行代理。第二种。直接共用宿主机网络,将端口暴露在宿主机
官方yaml默认是由service代理的

1、ingress controller安装

1、执行下载好的yaml
kubectl apply -f ingress-controller-1.1.yaml
2、他默认在ingress-nginx这个命名空间下
kubectl get pods -n ingress-nginx
其中,imagess-nginx-controller启动即可,剩余两个为job容器, 不需要理会
查看暴露的service端口
kubectl get pods,svc -n ingress-nginx

2、使用

先创建规则
创建:
 kubectl apply -f xxx.yaml 
查看:
kubectl get ingress
 测试:本地电脑绑定hosts记录对应ingress里面配置的域名 例: web1.aliangedu.cn
例如这可以生成一个示例yaml
kubectl create ingress web1 --rule=host/path=web:80 --dry-run=client -o yaml
可以以此为参考
或者直接在官网下载示例
官网地址
在使用前要明白一点。即ingress是代理service的,所以在使用ingress前要先有创建service
kubectl get svc
以这个nginx的service为例
vi ingress1.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web1
spec:
  ingressClassName: "nginx"
  rules:
  - host: web1.aliangedu.cn
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx
            port:
              number: 80
标红都是需要注意修改的,service是此ingress绑定的service
执行
kubectl apply -f ingress1.yaml
查看ingress
kubectl get ingress
他们分别是此images名、代理的service名、代理的域名、节点所在ip、服务走的端口
所以,我们访问域名即可访问此服务
注意:访问前先确定自己的访问电脑是否对此域名做了dns解析
在访问域名加对应的ingress端口即可成功
整个访问流程:
Service NodePort访问Ingress Controller
域名(web1.aliangedu.cn:32613) -> 公网负载均衡器(80) -> service nodeport(80:32613/TCP,443:31743/TCP)-> iptables/ipvs -> ingress controller Pod(nginx,基于域名分流) -> 分布在各个节点上的pod

ingress切换宿主机ip

在ingress的yaml中搜索containers
在containers上新加hostNetwork: True,与containers同级
kubectl apply -f ingress-controller-1.1.yaml
他会重建
此时访问地址变成这样
hostNetwork访问Ingress Controller:
域名(web1.aliangedu.cn:80) -> 公网负载均衡器(80) -> 宿主机80端口是ingress controller监听的 -> ingress controller(nginx,基于域名分流) -> 分布在各个节点上的pod
使用network的好处时他避开了service的代理,直接从宿主机访问,更方便快捷,坏处是只能访问他分配到的ip才能访问,没有service那么灵活

ingress定义

ingress是一个全局入口(80和443),为集群中所有应用转发
公网负载均衡器在其中的作用:
1、将k8s节点(内网)暴露到互联网上
2、为互联网用户统一访问入口,特别是针对service nodeport
3、加强k8s网络安全
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值