Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kubernetes Ingress 学习

Kubernetes Ingress 学习

作者头像
大江小浪
发布于 2018-12-04 09:01:21
发布于 2018-12-04 09:01:21
1.7K00
代码可运行
举报
文章被收录于专栏:小狼的世界小狼的世界
运行总次数:0
代码可运行

Kubernetes 中暴露服务的方式有三种

  • Loadbalancer 这种方式往往需要云供应商支持,或者本地F5等设备支持
  • NodePort 这种方式调用方通过NodeIP:NodePort 的方式访问服务,无法应对Pod发生迁移时的场景
  • Ingress Ingress是Kubernetes中的一种资源,通过这种资源提供了外部访问内部服务的通路,实现上是通过一个Pod加NodePort来实现的。通过Ingress,方便我们自己定义负载均衡。现在有很多种的Ingress支持,本文主要介绍Nginx的方案。

Kubernetes社区和Nginx公司都发布了一款叫做Nginx-ingress的Controller,它们之间的不同可以参考 Difference between two nginx-ingress 本文基于 Nginx-ingress Controller 做的实验。版本为 1.3.0。

Kubernetes 社区方案

安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@devops-101 ~]# kubectl apply -f  https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
namespace/ingress-nginx created
configmap/nginx-configuration created
serviceaccount/nginx-ingress-serviceaccount created
clusterrole.rbac.authorization.k8s.io/nginx-ingress-clusterrole created
role.rbac.authorization.k8s.io/nginx-ingress-role created
rolebinding.rbac.authorization.k8s.io/nginx-ingress-role-nisa-binding created
clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress-clusterrole-nisa-binding created
deployment.extensions/nginx-ingress-controller created
[root@devops-101 ~]# kubectl get pods --all-namespaces -l app.kubernetes.io/name=ingress-nginx --watch
NAMESPACE       NAME                                        READY     STATUS              RESTARTS   AGE
ingress-nginx   nginx-ingress-controller-664f488479-pr87w   0/1       ContainerCreating   0          5s
ingress-nginx   nginx-ingress-controller-664f488479-pr87w   0/1       Running   0         11s
ingress-nginx   nginx-ingress-controller-664f488479-pr87w   1/1       Running   0         16s
[root@devops-101 ~]# kubectl get all -n ingress-nginx
NAME                                            READY     STATUS    RESTARTS   AGE
pod/nginx-ingress-controller-664f488479-pr87w   1/1       Running   0          2m

NAME                                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-ingress-controller   1         1         1            1           2m

NAME                                                  DESIRED   CURRENT   READY     AGE
replicaset.apps/nginx-ingress-controller-664f488479   1         1         1         2m

安装文件mandatory,需要增加hostNetwork属性,否则访问的时候总是有问题。

配置tomcat和httpd

从我的Github上下载tomcat-deploy\httpd-deploy\tomcat-service\httpd-service几个文件,并分别部署。

再下载tomcat-ingress.yaml文件,进行部署。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-ingress
#  namespace: nginx-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: ingressweb.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-service
          servicePort: 8080
      - path: /httpd
        backend:
          serviceName: httpd-service
          servicePort: 80

验证

上面的例子中,我配置的域名为 ingressweb.com ,在本地修改host,指向ingress-controller运行的节点,通过浏览器访问 http://ingressweb.com 可以看到 tomcat 的界面,通过 http://ingressweb.com/httpd 可以看到httpd的It Works!界面。

Nginxinc 的方案

看一下Nginx Ingress Controller的示意图

Nginx Ingress Controller 支持的功能

  • 暴露服务,一般有两种方式,通过不同的主机名(如 serviceA.com,serviceB.com)或者通过不同的URL(如 /serviceA 和 /serviceB)。
  • 配置SSL支持
  • TCP负载均衡
  • Url 重写

安装

首先需要有一个可以正常运行的Kubernetes环境,如果还没有,可以参考我的安装步骤 kubeadm安装kubernetes V1.11.1 集群

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@devops-101 ~]# kubectl apply -f ingress-install.yaml 
namespace/nginx-ingress created
serviceaccount/nginx-ingress created
secret/default-server-secret created
configmap/nginx-config created
clusterrole.rbac.authorization.k8s.io/nginx-ingress configured
clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress configured
deployment.extensions/nginx-ingress created
[root@devops-101 ~]# kubectl get pods -n nginx-ingress
NAME                             READY     STATUS    RESTARTS   AGE
nginx-ingress-767cc6477f-flj2f   1/1       Running   5          4m

实例

没有规则配置的时候,对于所有的请求默认都返回404状态。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@devops-101 ~]# kubectl apply -f cafe-example.yaml 
deployment.extensions/coffee created
service/coffee-svc created
deployment.extensions/tea created
service/tea-svc created
secret/cafe-secret created
ingress.extensions/cafe-ingress created
[root@devops-101 ~]# IC_IP=192.168.0.102
[root@devops-101 ~]# IC_HTTPS_PORT=31586
[root@devops-101 ~]# curl --resolve cafe.example.com:$IC_HTTPS_PORT:$IC_IP https://cafe.example.com:$IC_HTTPS_PORT/tea --insecure
Server address: 172.16.1.138:80
Server name: tea-7d57856c44-jxpvt
Date: 22/Oct/2018:11:37:47 +0000
URI: /tea
Request ID: 796e79e0280a27743cb682b8e893d6e9

参考资料

  1. Kubernetes ingress controller
  2. Github nginx ingress
  3. Difference between two nginx-ingress
  4. Kubernetes的负载均衡问题
  5. 初试Kubernetes暴露服务类型之Nginx Ingress
  6. Kubernetes Nginx Ingress
  7. Kubernetes Nginx Ingress教程
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
哪些 Python 库让你相见恨晚?
Awesome Python 环境管理 管理 Python 版本和环境的工具 我想很多程序员应该记得 GitHub 上有一个 Awesome – XXX 系列的资源整理。awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。 Awesome Python 环境管理 包管理 包仓库 分发 构建工具 交互式解析器 文件 日期和时间 文本处理 特
十四君
2019/11/27
4K0
相见恨晚!OLAP数仓基础入门大全
导读:近七年在网易杭研一直从事数据库相关的开发工作,主要是MySQL和MongoDB这两种数据库,去年开始涉及图数据库Neo4J。上述几种,都可认为是OLTP类数据处理,由于工作需要,需要调研学习OLAP技术和相关系统,本文开始逐步进行第一轮总结,很多东西还只是片面理解,权当做个笔记。
Python数据科学
2020/09/30
8810
相见恨晚!OLAP数仓基础入门大全
10个令人相见恨晚的R语言包
新媒体管家 大约3年前我开始使用R,起初进展很慢,与我习惯的语言相比,语法更加直观也比较简单,而且需要一段时间才能习惯于细微的差别。我还不清楚语言的力量与社区和各种包的密切关系。 和其他语言(比如Py
CDA数据分析师
2018/02/08
1.6K0
10个令人相见恨晚的R语言包
一文轻松学会linux字符设备驱动
在linux系统中许多外围设备都被规定为字符设备,诸如按键、触摸屏、重力传感器、LED、光敏传感器等,这些设备都需要字符设备驱动才能正常工作。本章就来实现一个标准的字符设备驱动框架模板,目的是为以后的设备驱动提供标准模板,提高开发效率与代码整洁度。
开源519
2020/09/20
1.7K0
一文轻松学会linux字符设备驱动
单片机开发之C语言编程基本规范
为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范。本标准规定了程序设计人员进行程序设计时必须遵循的规范。本规范主要针对单片机编程语言和08编译器而言,包括排版、注释、命名、变量使用、代码可测性、程序效率、质量保证等内容。 1.基本规则 格式清晰、注释简明扼要、命名规范易懂、函数模块化、程序易读易维护、功能准确实现、代码空间效率和时间效率高、适度的可扩展性、单片机编程规范-标识符命名 2.标识符命名
用户4645519
2020/09/08
2K0
年薪20万Python工程师进阶(7):Python资源大全,让你相见恨晚的Python库
用来访问第三方 API的库。 参见: List of Python API Wrappers and Libraries。
Python之道
2018/08/20
2.8K0
年薪20万Python工程师进阶(7):Python资源大全,让你相见恨晚的Python库
C语言头文件组织与包含原则
如非特殊说明,文中“源文件”指 * .c文件,“头文件”指 *.h文件,“引用”指包含头文件。
C语言与CPP编程
2020/12/10
5.4K1
C语言头文件组织与包含原则
【Binder 机制】Native 层 Binder 机制分析 ( service_manager.c | 开启 Binder | 注册 Binder 进程上下文 | 开启 Binder 循环 )
Init 进程 启动 Zygote , Zygote 启动 System Server 进程 ;
韩曙亮
2023/03/29
7620
[C语言]分支循环语句
2. 循环执行语句: do while 语句、 while 语句、 for 语句;
IT编程爱好者
2023/04/12
8290
[C语言]分支循环语句
超全 | 只有高手才知道的C语言高效编程与代码优化方法(一)
大雄总结了一些让程序运行更快的方法,可以帮助我们从执行速度和内存使用等方面来优化C语言代码。
老九君
2019/05/09
6.3K0
C语言混乱代码
偶然看到的这么个东西,话说这个活动很久了。看了代码果然不一般啊,不一般。 /* + + + +
obaby
2023/02/24
3.6K0
【C语言篇】C语言常考及易错题整理DAY1
swap函数调用时用的是全局变量,主函数中定义的变量只在主函数中有效,因为主函数也是一个函数,它与其他函数是平 行关系;输出语句这里,考虑局部优先的原则
半截诗
2024/10/09
1620
C语言高效编程与代码优化
在本篇文章中,我收集了很多经验和方法。应用这些经验和方法,可以帮助我们从执行速度和内存使用等方面来优化C语言代码。
C语言与CPP编程
2020/10/20
3.3K0
【C语言入门】初识C语言:掌握编程的基石
前言: 在踏入C语言编程的奇妙旅程之初,掌握基本语句无疑是我们搭建知识大厦的坚实基石。C语言,作为一门历史悠久且功能强大的编程语言,其简洁明了的语法结构为我们提供了表达逻辑、控制程序流程的强大工具。而基本语句,正是这些工具中的基础与核心。
Eternity._
2024/07/09
4060
【C语言入门】初识C语言:掌握编程的基石
C语言基础总结
我学习的第一门编程语言是Java,所以之前一直没有系统学习过C语言。这篇文章主要就是我学习过程的一个总结,方便以后复习查看。
害恶细君
2024/09/16
2100
C语言基础总结
它来了,关于Golang并发编程的超详细教程!
导语 | 本文主要对go并发基础库、扩展以及三方库的一些使用和技巧进行介绍, 并且指出一些常见问题,以及对一些并发库的选择和优化进行分析和探讨,为读者提供一些相关经验和交流分享。 go原生/扩展库 提倡的原则 不要通过共享内存进行通信;相反,通过通信来共享内存。 [如何贯彻这个原则的demo1.3.5](#有锁的地方就去用channel优化) Goroutine (一)goroutine并发模型 调度器主要结构 主要调度器结构是M、P、G: M,内核级别线程,goroutine基于M之上,代表执行者
腾讯云开发者
2021/12/21
2.3K0
C语言在嵌入式系统编程时的注意事项
该文介绍了如何利用C语言实现字符串的反转、检查字符串中的特定字符、字符串替换以及字符串比较等操作。同时,文章还介绍了如何使用C语言中的指针、数组和结构体等数据结构来实现字符串操作,并给出了相应的示例代码。
企鹅号小编
2018/01/03
2.6K0
C语言在嵌入式系统编程时的注意事项
【C语言】C语言入门知识
(1)全局变量------在{}外部定义的变量 (2)局部变量------在{}内部定义的变量
YoungMLet
2024/03/01
1.7K0
【C语言】C语言入门知识
初识C语言
前言:初识C语言只是粗略的把C的基础知识蜻蜓点水般的过一遍,后期我会分享出详细的各个知识点详解。
用户10517932
2023/10/07
1980
初识C语言
【eBPF笔记中篇】运行原理、交互、event触发 解析(未完)
从之前的分析已经得知,.c的eBPF程序会通过BCC等工具编译并加载到内核中,但是具体在内核中,ebpf是如何工作的呢?
历久尝新
2022/02/15
3.5K0
【eBPF笔记中篇】运行原理、交互、event触发 解析(未完)
推荐阅读
相关推荐
哪些 Python 库让你相见恨晚?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验