百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

kubernetes 采用 Ingress 发布服务

off999 2025-02-04 15:39 33 浏览 0 评论

我们要将kubernetes集群内的服务发布到集群外使用,之前使用的方法都是 NodePort、LoadBalancer的 Service,或者是给 Service 配置 ExternalIP,也可以通过 Pod 的 HostPort 进行配置。但是这些方式都存在一些问题,几乎都是通过节点端口的形式向外暴露服务的,了解 Service 的人应该知道,通过 Service 向外暴露端口,实际是在集群中的所有节点上监听同一个端口,如果 Service 非常多,那每个节点上开启的端口就会变得很多,这样维护起来很复杂,而且也非常不安全。

使用 Ingress 可以解决这个问题,除了 Ingress 自身的服务向外发布以外,其他服务都不需要直接向外发布。用 Ingress 接收所有的外部请求,然后按照域名配置转发给对应的服务。

Ingress 简介

Ingress 包含 3 个组件

  • 反向代理负载均衡器这个类似 Nginx、Apache ,在集群中可以使用 Deployment、DaemonSet 等控制器来部署反向代理负载均衡器。
  • Ingress 控制器作为一个监控器不停地与 API Server 进行交互,实时的感知后端 Service、Pod 等的变化情况,例如新增或者减少,得到这些变化信息后,Ingress 控制器再结合 Ingress 服务自动生成配置,然后更新反向代理负载均衡器并且刷新其配置,达到服务发现的作用。
  • Ingress 服务定义访问规则,加入某个域名对应某个 Service,或者某个域名下的子路径对应某个 Service,那么当这个域名的请求进来时,就把请求转发给对应的 Service。根据这个规则,Ingress 控制器会将访问的规则动态写入负载均衡器的配置中,从而实现整体的服务发现和负载均衡。

Ingress 控制器的种类有很多种,但是在基本使用层面几乎没有差别,下面我们使用 Ingress-Nginx 控制器来展示一下 Ingress 的基本使用。

创建 Ingress-Nginx 控制器

下载官方部署文件 https://github.com/kubernetes/ingress-nginx

选择Tags对应的版本,我这里选择最新的,这个要看 kubernetes 集群的版本,如果版本比较低,有些 API 是不存在的,所以不一定要最新的版本,根据情况下载即可。下载好部署文件https://github.com/kubernetes/ingress-nginx/blob/nginx-0.30.0/deploy/static/mandatory.yaml,需要做一些简单的修改,在 Deployment 服务中指定网络方式为 hostNetwork: true,这样就可以在集群外部访问 Ingress 服务。

执行部署:

kubectl apply -f mandatory.yaml

测试 Ingress 服务

  • 创建两个服务 Nginx/Httpd
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      example: nginx
  template:
    metadata:
      labels:
        example: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    example: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd
spec:
  replicas: 1
  selector:
    matchLabels:
      example: httpd
  template:
    metadata:
      labels:
        example: httpd
    spec:
      containers:
      - name: httpd
			  image: httpd:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: httpd
spec:
  selector:
    example: httpd
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

执行创建命令:kubectl apply -f service.yml 测试一下服务是否可以正常访问

kubect get all

在解决节点的任意机器上访问服务:

curl 10.111.194.232
curl 10.109.202.249

创建 Ingress

基于多域名配置

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: webservice
  annotations:
    Kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: www.httpd.com
    http:
      paths:
      - path: /
        backend:
          serviceName: httpd
          servicePort: 80
  - host: www.nginx.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx
          servicePort: 80

执行创建命令:kubectl apply -f ingress.yml查询创建的 Ingress 信息:kubectl get ingress

可以看到 HOSTS 中显示的域名信息

  • 查看 Ingress-Nginx pod 负载均衡信息
kubectl get po -n ingress-nginx
# 进入 nginx-ingress-controller Pod 容器
kubectl exec -it nginx-ingress-controller-77db54fc46-q8vp7 -n ingress-nginx -- /bin/bash

# 查看运行的进程
ps -ef

可以看到 nginx-ingress-controller Pod 容器中运行的是 nginx 程序,我们再查看以下 nginx.conf 配置文件

配置文件中自动生成了 www.httpd.com 和 www.nginx.com 的服务配置

访问测试

  • 查询 Ingress-Nginx 部署节点
kubectl get po -n ingress-nginx -o wide
  • 修改本机的 hosts 文件
vi /etc/host

192.168.143.132 www.nginx.com
192.168.143.132 www.httpd.com
  • 访问网站,查看内容

基于多个子域名配置

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: web
  annotations:
    Kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: webservice.com
    http:
      paths:
      - path: /httpd
        backend:
          serviceName: httpd
          servicePort: 80
      - path: /nginx
        backend:
          serviceName: nginx
          servicePort: 80

其他的配置测试与上面一致。

相关推荐

chrome安卓版下载(chrome安卓版下载极速)

如果您在手机上使用Chrome浏览器时下载速度较慢,以下是一些可能的解决方法:1.检查并改善网络连接:首先,确保您的手机处于良好的网络连接状态。尝试连接到其他Wi-Fi网络或使用移动数据连接,查看下...

一键制作u盘启动盘(一键制作u盘启动盘,电脑安装系统不求人!)

U盘启动盘的制作过程如下,首先你用U盘制作工具,像大白菜或U盘启动大师将U盘制成启动盘,制作过程中会提示你对U盘进行格式化确认后,可以生成U盘的引导盘和一些制作工具,仅BIOS设置成U盘启动后,在PE...

火影忍者下载(火影忍者下载要多久)

安卓的手机可以去自带的手机商城下载或去浏览器里搜索下载,可以去浏览器里搜索官方,然后从官方的里边下载。或者像别的一些软件,比如应用宝啊,4399小游戏之类的都可以下载,如果是苹果手机的话,那就自求多福...

免费邮箱大全(免费邮箱大全号码大全和密码)

因为我自己工作用的是189邮箱,觉得还不错,所以就推荐给你吧。189邮箱自带15G的云邮容量,邮件附件随意放。而且功能也是蛮多的,像语音输入、日程提醒等,都是很实用的功能,不过我还是最喜欢的它的免密登...

蜘蛛纸牌(蜘蛛纸牌游戏)

玩法是用鼠标单击来玩蜘蛛纸牌,玩法很简单只要每一种类型的按照顺序让A-K连成串就能消去。2.游戏开始时,为500分。以后每移牌或撤销移牌一次,扣一分。当一组同一花色的牌被移除整理到左下方时,加100分...

toptop官网(toptop官网入口地址)

答:找回有三种方式:绑定手机、安全手机和绑定邮箱绑定手机、安全手机和绑定邮箱,是不可以使用实名认证也就是身份证找回的。不过如果没有提前绑定安全手机和邮箱的话,就只能使用绑定手机找回。步骤都是一样的,这...

视频剪辑制作(视频剪辑制作教程)

操作步骤:第一步、首先,在电脑上打开视频剪辑工具,根据自己的需要在左侧选择需要的功能,比如说“视频合并”功能;?第二步、接着,点击“打开文件夹”或“打开文件”添加需要合并的视频,可批量选中添加;?第三...

ppt下载免费网站(ppt免费下载网站哪个好)

好多网站的PPT课件资源都要收费的,我推荐一个免费的课间资源软件,叫101教育PPT。它里面有各个年级课程章节对应的免费PPT课件、教案、电子教材,直接插入就可以使用。也可以根据需求自主编辑,因为软件...

微信赚钱一天100收入(2022微信赚钱一天100收入)

是真的!本来我也不信的后来想反正就十块不如试一试结果真的能赚钱哈哈不过可能有的是骗人的只要你认真去做,当然可以赚到钱了。目前微信小程序赚钱的方式主要有三种,(1)如果你自身有技术的话,你可以开...

豌豆荚下载官方正式版(豌豆荚下载官网下载)

豌豆荚从官方渠道获取应用,但并不完全是官方版本。豌豆荚与众多应用开发者合作,为用户提供最新的应用版本和稳定、安全的下载体验。不过,一些应用可能由豌豆荚进行额外的优化或定制,以提高用户体验或满足特定需求...

adobe flash官方下载(adobe flash player下载官网最新版)

您可以从Adobe官网(https://get.adobe.com/flashplayer/)下载AdobeFlashPlayer最新版本,并在您的手机上安装它。明显你是安装错版本了,这个可是分3...

58同城app下载安装官方免费下载

如果想要下载PC版(下载在电脑上使用),直接在浏览器中搜索就可以找到;如果想要下载手机版APP,最好是在手机自带或者已经下载好的应用商店搜索下载。其实电脑版下载没有什么必要,直接登录官方网站查看就好了...

360管家软件下载(360管家软件下载安装)

360和电脑管家,都是电脑的一个安全软件,这两种软件用户量和功能其实都差不多的要说哪个好用的话,看你偏向怎么用了,和你得使用习惯了下面我给大家分别说一下这两款软件的优缺点,嗯,首先说电脑管家的优点电脑...

红警2共和国之辉下载(红警2共和国之辉下载电脑版)

要下载《红警共和国之辉》,首先需要找到可靠的游戏下载平台,比如Steam、Origin、Uplay等。在平台上搜索游戏名称,选择购买和下载。下载过程中要注意网络连接稳定和电脑系统是否满足游戏要求,如需...

高德地图车机版官网(高德地图车机版官网入口)

手机安装高德地图车机版方法:进入【设置】--【其他设置】--【关于软件】中,选择检测更新。注:只有正式版才可程序内升级。方式二:官网下载安装步骤一:在官网下载公众版V2.0版本。步骤二:将软件拷贝到U...

取消回复欢迎 发表评论: