Kubernetes Ingress 学习
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 社区方案
安装
[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文件,进行部署。
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 集群
[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状态。
[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

参考资料
- Kubernetes ingress controller
- Github nginx ingress
- Difference between two nginx-ingress
- Kubernetes的负载均衡问题
- 初试Kubernetes暴露服务类型之Nginx Ingress
- Kubernetes Nginx Ingress
- Kubernetes Nginx Ingress教程
Kubernetes Ingress 学习的更多相关文章
- Kubernetes Ingress Controller的使用及高可用落地
Kubernetes Ingress Controller的使用及高可用落地 看懂本文要具备一下知识点: Service实现原理和会应用 知道反向代理原理,了解nginx和apache的vhost概念 ...
- Kubernetes Ingress管理
目录 Ingress介绍 1.Pod漂移问题 2.端口管理问题 3.域名分配及动态更新问题 Nginx Ingress配置 1.部署默认后端 2.部署Ingress Controller 3.部署In ...
- Kubernetes Ingress 部署
Kubernetes Ingress 部署 Pod与Ingress的关系• 通过service相关联• 通过Ingress Controller实现Pod的负载均衡- 支持TCP/UDP 4层和HTT ...
- [转帖]kubernetes ingress 在物理机上的nodePort和hostNetwork两种部署方式解析及比较
kubernetes ingress 在物理机上的nodePort和hostNetwork两种部署方式解析及比较 https://www.cnblogs.com/xuxinkun/p/11052646 ...
- Kubernetes Ingress日志分析入门
本文主要介绍如何基于日志服务构建Kubernetes Ingress日志分析平台,并提供一些简单的动手实验方便大家快速了解日志服务相关功能. 部署Ingress日志方案 登录容器服务管理控制台. 将上 ...
- Kubernetes Ingress简单入门
作者:Nick Ramirez 原文链接:https://thenewstack.io/kubernetes-ingress-for-beginners/ 本文转载自Rancher Labs 不知道你 ...
- 在 Kubernetes Ingress 中支持 Websocket/Socket 服务
Kubernetes Ingress 可将集群内部的 Service 通过 HTTP/HTTPS 的方式暴露供外部访问,并通过路径匹配规则定义服务的路由.但是 Ingress 对 TCP/UDP 的服 ...
- CORS跨源资源共享概念及配置(Kubernetes Ingress和Spring Cloud Gateway)
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 跨源资源共享CORS 跨源资源共享 (CORS) (或通俗地译为跨域资源共享)是一种基于HTTP 头的机制,该机制通过 ...
- 几张图解释明白 Kubernetes Ingress
来源:K8s技术圈 作者:阳明 Kubernetes Ingress 只是 Kubernetes 中的一个普通资源对象,需要一个对应的 Ingress 控制器来解析 Ingress 的规则,暴露服务到 ...
随机推荐
- Service Fabric SfDevCluster目录从默认的C盘移动
管理员权限打开Powershell CD\ 回车 CD "C:\Program Files\Microsoft SDKs\Service Fabric\ClusterSetup" ...
- loadrunner之运行方式:线程还是进程?
loadrunner controller将使用驱动程序mmdrv运行Vuser. 用户可以在controller的run-time setting中选择Vuser的运行方式: 是多进程方式还是多线程 ...
- ZOJ 3769-Diablo III(DP)
描述 Diablo III is an action role-playing video game. A few days ago, Reaper of Souls (ROS), the new e ...
- CNN:人工智能之神经网络算法进阶优化,六种不同优化算法实现手写数字识别逐步提高,应用案例自动驾驶之捕捉并识别周围车牌号—Jason niu
import mnist_loader from network3 import Network from network3 import ConvPoolLayer, FullyConnectedL ...
- Windows10系统网络连接问题
Thinkpad笔记本Windows10系统突然遇到网络连接问题: 问题:今天同事遇到一个WiFi连接问题,ThinkPad笔记本在公司和家里面都无法连接WiFi 寻找问题: 1.检查硬件问题 首先我 ...
- 大数据项目之_15_电信客服分析平台_03&04_数据分析
3.3.数据分析3.3.1.Mysql 表结构设计3.3.2.需求:按照不同的维度统计通话3.3.3.环境准备3.3.4.编写代码:数据分析3.3.5.运行测试3.3.6.bug 解决 3.3.数据分 ...
- SpringMVC(二七) 自定义视图
可以参考博客http://www.cnblogs.com/parryyang/p/5683600.html,举例很清晰. 对自定义的视图名称匹配不同的解析器进行解析. 作用:自己定义视图,视图继承vi ...
- Xamarin Essentials教程发送邮件Email
Xamarin Essentials教程发送邮件Email 邮件是一种更为灵活的数据分享方式.它可以帮助用户将一个应用程序的数据分享给其他用户,而其他用户不需要安装特定的应用程序,就可以在任意时间 ...
- JavaScript基础笔记(十)表单脚本
表单脚本 一.表单基础知识 JavaScript中表单对应的是HTMLFormElement类型,该类型继承自HTMLElement类型. 通过document.forms可以获得所有表单元素,通过数 ...
- tomcat修改端口号
以前只知道当tomcat端口号冲突了如何修改tomcat默认的8080端口号 今天遇到个情况,装了个BO,自带个tomcat,这时就需要修改三个地方 修改Tomcat的端口号: 在默认情况下,tomc ...