我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Ingress实战

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Ingress实战

Ingress

Ingress 是 Kubernetes 的一种 API 对象,将集群内部的 Service 通过 HTTP/HTTPS 方式暴露到集群外部,并通过规则定义 HTTP/HTTPS 的路由。Ingress 具备如下特性:集群外部可访问的 URL、负载均衡、SSL Termination、按域名路由(name-based virtual hosting)。

Ingress Controller (通常需要负载均衡器配合)负责实现 Ingress API 对象所声明的能力。如下图所示:

  1. Ingress Controller 监听所有 worker 节点上的 80/443 端口

  2. Ingress Controller 将所有对域名为 a.kuboard.cn 的 HTTP/HTTPS 请求路由到 Service B 的 9080 端口

  3. Service B 将请求进一步转发到其标签所选择的 Pod 容器组(通过 targetPort 指定容器组上的端口号)

该图中,请求被转发的过程为:

  1. 假设您将 a.kuboard.cn 的 DNS 解析到了集群中的一个 worker 节点的 IP 地址 192.168.2.69。(如果您的 worker 节点有外网地址,请使用外网地址,这样您可以从外网访问您的服务)

  2. 从客户端机器执行命令 curl http://a.kuboard.cn/abc/,该请求您将被转发到 192.168.2.69 这个地址的 80 端口,并被 Ingress Controller 接收

  3. Ingress Controller 根据请求的域名 a.kuboard.cn 和路径 abc 匹配集群中所有的 Ingress 信息,并最终找到 Ingress B 中有这个配置,其对应的 Service 为 Service B 的 9080 端口

  4. Ingress Controller 通过 kube-proxy 将请求转发到 Service B 对应的任意一个 Pod 上 与 Service B 的 9080 端口对应的容器端口上。(从 Ingress Controller 到 Pod 的负载均衡由 kube-proxy + Service 实现)

1.png

 

Ingress Controller

如上所述,您必须在 Kubernetes 集群中安装了 Ingress Controller,您配置的 Ingress 才能生效。

划重点

Ingress 只是 Kubernetes 中的一种配置信息;Ingress Controller 才是监听 80/443 端口,并根据 Ingress 上配置的路由信息执行 HTTP 路由转发的组件。

Ingress Controller 有多种实现可供选择,请参考 Kubernetes 官方文档 Additional controllers,比较常用的有 Traefic 、 Nginx Ingress Controller for Kubernetes 等。

如果您参考 https://kuboard.cn 网站上提供的文档安装了 Kubernetes,您应该已经完成了 Nginx Ingress Controller for Kubernetes 在您 Kubernetes 集群中的安装。该 Ingress Controller 以 DaemonSet 的类型部署到 Kubernetes,且监听了 hostPort 80/443

 

环境介绍

系统dockerip主机名配置
centos 7.619.03.5192.168.31.150k8s-master2核4G
centos 7.619.03.5192.168.31.183k8s-node012核4G
centos 7.619.03.5192.168.31.178k8s-node022核4G

 

 

 

 

 

安装

在 master 节点上执行

kubectl apply -f https://kuboard.cn/install-script/v1.17.x/nginx-ingress.yaml

配置域名解析

将域名 *.demo.yourdomain.com 解析到 demo-worker-a-2 的 IP 地址 z.z.z.z (也可以是 demo-worker-a-1 的地址 y.y.y.y)

验证配置

在浏览器访问 a.demo.yourdomain.com,将得到 404 NotFound 错误页面

 

发布应用

应用yaml

这里以flaskapp为例

vi flaskapp.yaml

内容如下:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    k8s.eip.work/displayName: flaskapp
    k8s.eip.work/ingress: 'false'
    k8s.eip.work/service: ClusterIP
    k8s.eip.work/workload: svc-flaskapp
  labels:
    k8s.eip.work/layer: svc
    k8s.eip.work/name: svc-flaskapp
  name: svc-flaskapp
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s.eip.work/layer: svc
      k8s.eip.work/name: svc-flaskapp
  template:
    metadata:
      labels:
        k8s.eip.work/layer: svc
        k8s.eip.work/name: svc-flaskapp
    spec:
      containers:
        -
          image: jcdemo/flaskapp
          imagePullPolicy: Always
          name: flaskapp
      restartPolicy: Always

---
apiVersion: v1
kind: Service
metadata:
  annotations:
    k8s.eip.work/displayName: flaskapp
    k8s.eip.work/workload: svc-flaskapp
  labels:
    k8s.eip.work/layer: svc
    k8s.eip.work/name: svc-flaskapp
  name: svc-flaskapp
  namespace: default
spec:
  ports:
    - name: wjaz2a
      nodePort: 0
      port: 5000
      protocol: TCP
      targetPort: 5000
  selector:
    k8s.eip.work/layer: svc
    k8s.eip.work/name: svc-flaskapp
  type: ClusterIP

注意:此段yaml内容,使用Kuboard生成的,创建工作负载,可以预览yaml文件。

关于Kuboard的使用,请参考链接:

https://www.cnblogs.com/xiao987334176/p/12060855.html

 

ingress yaml

vi flaskapp-ingress.yaml

内容如下:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: svc-flaskapp
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: flaskapp.baidu.com
    http:
      paths:
      - path:
        backend:
          serviceName: svc-flaskapp
          servicePort: 5000

注意: Kuboard也可以生成ingress,但是有bug,外部无法访问。

因此这段,我是手动编写的。注意修改上面的红色文字。

 

执行yaml

kubectl apply -f flaskapp.yaml
kubectl apply -f flaskapp-ingress.yaml

 

查看pod

# kubectl get pods -o wide
NAME                          READY   STATUS    RESTARTS   AGE    IP              NODE         NOMINATED NODE   READINESS GATES
svc-flaskapp-774c665d-c42ft   1/1     Running   0          113m   10.244.58.194   k8s-node02   <none>           <none>

 

查看svc

# kubectl get svc
NAME           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes     ClusterIP   10.1.0.1       <none>        443/TCP        56d
svc-flaskapp   ClusterIP   10.1.116.148   <none>        5000/TCP       123m

 

查看ingresses

# kubectl get ingresses.extensions
NAME           HOSTS                ADDRESS   PORTS   AGE
svc-flaskapp   flaskapp.baidu.com             80      106m

 

设置域名解析

如果没有dns,修改windows 10的hosts,添加一条记录

192.168.31.164 flaskapp.baidu.com

注意:解析到任意node节点都可以!

 

访问页面

http://flaskapp.baidu.com/

效果如下:

1.png

 

 

 

本文参考链接:

https://www.kuboard.cn/learning/k8s-intermediate/service/ingress.html#ingress

https://www.kuboard.cn/install/install-k8s.html#%E5%AE%89%E8%A3%85-ingress-controller


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Ingress实战

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Ingress实战

IngressIngress 是 Kubernetes 的一种 API 对象,将集群内部的 Service 通过 HTTP/HTTPS 方式暴露到集群外部,并通过规则定义 HTTP/HTTPS 的路由。Ingress 具备如下特性:集群外部
2023-01-31

Ingress和Ingress Controller的理解

Ingress和Ingress Controller是Kubernetes中用来实现负载均衡和路由的重要组件。Ingress是一个Kubernetes资源对象,用于定义集群中外部流量进入集群的规则。它可以将入站流量路由到集群中的不同服务,实
2023-09-21

docker中ingress资源和ingress controller的示例分析

小编给大家分享一下docker中ingress资源和ingress controller的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! Ingr
2023-06-04

nginx ingress限速怎么配置

本篇内容介绍了“nginx ingress限速怎么配置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!从业务场景出发在业务开发过程中,我们有个
2023-07-06

traefik Ingress https配置

1、理解Ingress简单的说,ingress就是从kubernetes集群外访问集群的入口,将用户的URL请求转发到不同的service上。Ingress相当于nginx、apache等负载均衡方向代理服务器,其中还包括规则定义,即URL
2023-01-31

前后端分离架构+k8s+ingress

在前面几篇文章中,已经讲到了前后端分离架构和ingress,链接如下:https://www.cnblogs.com/xiao987334176/p/12195722.htmlhttps://www.cnblogs.com/xiao9873
2023-01-31

k8s Ingress如何使用

本篇内容主要讲解“k8s Ingress如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“k8s Ingress如何使用”吧!一、什么是Ingress在上一篇关于k8s之service的使用
2023-07-05

ingress是什么意思

ingress是基于域名的网络转发资源的意思。ingress是对集群中服务的外部访问进行管理的API对象,典型的访问方式是HTTP和HTTPS。Ingress可以提供负载均衡、SSL和基于名称的虚拟托管。ingress简介ingress是基
2023-07-10

ingress是什么软件

ingress是一个无威胁文件软件,文件大小364KB,是 k8s 资源对象,用于对外暴露服务,该资源对象定义了不同主机名及URL和对应后端Service的绑定,根据不同的路径路由http和https流量。ingress简介Ingress是
2023-07-10

Kubernetes Ingress实现细粒度IP访问控制

这篇文章主要为大家介绍了Kubernetes Ingress实现细粒度IP访问控制,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-15

nginx ingress限速那些事浅析

这篇文章主要为大家介绍了nginx ingress限速的一些知识的浅析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-15

如何理解kubernetes中的Ingress

如何理解kubernetes中的Ingress,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一:简介Ingress资源对象,用于将不同URL的访问请求转发到后端不同的Ser
2023-06-04

Kubernetes中如何部署Traefik Ingress

这篇文章给大家分享的是有关Kubernetes中如何部署Traefik Ingress的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一:前言1.到目前为止 Kubernetes 暴露服务的有三种方式,分别为 Lo
2023-06-04

k8s的ingress概念是什么

Kubernetes (k8s) 中的 Ingress 是一种 API 对象,用于将外部流量路由到集群内的服务。它充当了将流量从集群外部路由到集群内部服务的入口点。Ingress 可以实现负载均衡、SSL/TLS 终止、基于域名的路由和路径
2023-10-11

Kubernetes Ingress怎么实现细粒度IP访问控制

这篇“Kubernetes Ingress怎么实现细粒度IP访问控制”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Kuber
2023-07-06
2023-10-23
2023-08-31

python实战

这个实战内容包含,selenium、pyquery、re、pymongopymongo安装去这里:https://blog.51cto.com/13155409/2125020实战抓取淘宝美食信息并且存入MongoDB数据库中实现源码如下:
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录