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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
kubernetes-ingress(十)
https://kubernetes.io/docs/concepts/services-networking/ingress/
yuezhimi
2020/09/30
5330
kubernetes-ingress(十)
再战 k8s(15):Ingress和Ingress Controller
从前面的学习,我们可以了解到Kubernetes暴露服务的方式目前只有三种:LoadBlancer Service、ExternalName、NodePort Service、Ingress;而我们需要将集群内服务提供外界访问就会产生以下几个问题:
看、未来
2022/05/06
1.7K0
再战 k8s(15):Ingress和Ingress Controller
使用prometheus采集ingress-nginx数据grafan展示效果
https://akomljen.com/get-kubernetes-cluster-metrics-with-prometheus-in-5-minutes/ https://github.com/kubernetes/ingress-nginx/tree/f56e839134fd4a1d020c3e95d4fe89496225041c/deploy/grafana/dashboards https://github.com/kubernetes/ingress-nginx/tree/f56e839134fd4a1d020c3e95d4fe89496225041c/deploy/monitoring
三杯水Plus
2019/03/14
1.7K0
使用prometheus采集ingress-nginx数据grafan展示效果
外包技能--Ingresn进阶之ingress-nginx
controller类似装的k8s组件,时常的要去api去交互,时常去获取api的相关的信息,刷新自己的规则,类似与其他控制器 ingress,k8s设计了一个比较全局性的负载均衡器,准确的来说Ingress它是k8s中的一个规则,实现这个规则就是使用的这个控制器,一般称为ingress控制器
Godev
2023/08/02
6810
08 . Kubernetes之 ingress及Ingress Controller
Ingress规则是很灵活的,可以根据不同域名,不同path转发请求到不同的service,并且支持https/http.
iginkgo18
2020/09/27
3.1K0
08 . Kubernetes之 ingress及Ingress Controller
附020.Nginx-ingress部署及使用
[root@master01 ingress]# git clone https://github.com/nginxinc/kubernetes-ingress/
木二
2020/06/04
1.2K0
【云原生 | Kubernetes篇】深入了解Ingress(十二)
这是nginx官方做的,适配k8s的,分为开源版和nginx plus版(收费)。
Lansonli
2022/06/15
6380
【云原生 | Kubernetes篇】深入了解Ingress(十二)
深入玩转K8S之如何访问业务应用(Traefik-ingress篇)
上篇懒得写了索性转载了一篇nginx-ingress的,本篇我们来看神器Traefik,我个人是比较看好和偏向与Traefik的,它轻便易用而且还有界面。
DevinGeng
2019/04/09
1.2K0
深入玩转K8S之如何访问业务应用(Traefik-ingress篇)
在k8s(kubernetes)上安装 ingress V1.1.3
Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由。流量路由由 Ingress 资源上定义的规则控制。
小陈运维
2022/04/21
1.3K0
Ingress-Nginx 服务暴露基础学习与实践
描述: 到目前为止我们了解kubernetes常用的三种暴露服务的方式:LoadBlancer Service、 NodePort Service、Ingress
全栈工程师修炼指南
2022/09/29
3.1K1
Ingress-Nginx 服务暴露基础学习与实践
Kubernetes 1.19.0——服务的发布
访问https://metallb.universe.tf/installation/
gz_naldo
2020/10/30
7350
Kubernetes 1.19.0——服务的发布
Ingress企业实战:部署高可靠性Ingress篇
当你在Kubernetes集群中运行多个应用程序时,每个应用程序都有自己的服务。为了让外部用户访问这些应用程序,就好像他们访问网站一样,我们需要一种方法来管理流量的分配和路由。这就是Ingress的作用。想象一下,您的Kubernetes集群就像一个大型的公寓楼,每个公寓是一个应用程序。而Ingress就是大楼的大门,允许外部人员进入。大门上有一个保安,他会检查来访者的目的地,并根据他们的要求告诉他们去哪里。Ingress就是这个保安,他知道应该将来自某个网址的请求引导到特定的应用程序。这可以通过不同的规则来实现,就像保安知道哪个公寓对应哪个房间号一样。这样,当人们访问不同的网址时,保安就会将他们引导到正确的应用程序。要使保安工作,您需要在大门口放置一个标志,告诉保安如何引导来访者。在Kubernetes中,这个标志就是Ingress对象。而控制这个保安的是Ingress Controller,它就像是保安的老板,负责确保保安按照标志上的规则来引导人们。总而言之,Ingress就是一种管理外部流量的方式,它允许您告诉集群如何将请求引导到正确的应用程序,就像大门保安将人们引导到正确的公寓一样。这使得外部用户能够方便地访问您在Kubernetes中运行的不同应用程序。
用户1107783
2023/09/11
3110
Ingress企业实战:部署高可靠性Ingress篇
Kubernetes 中 traefik ingress 的使用
简单的说,ingress就是从kubernetes集群外访问集群的入口,将用户的URL请求转发到不同的service上。Ingress相当于nginx、apache等负载均衡反向代理服务器,其中还包括规则定义,即URL的路由信息。
kubernetes中文社区
2019/06/24
1.8K0
Kubernetes 中 traefik ingress 的使用
kubernetes系列教程(十六)基于nginx ingress实现服务暴露
本章介绍kubernetes系列教程的ingress概念,在kubernetes中对外暴露服务的方式有两种:service(NodePort或者外部LoadBalancer)和ingress,其中service是提供四层的负载均衡,通过iptables DNAT或lvs nat模式实现后端Pod的代理请求。如需实现http,域名,URI,证书等请求方式,service是无法实现的,需要借助于ingress来来实现,本文将来介绍ingress相关的内容。
HappyLau谈云计算
2020/01/01
41.3K0
kubernetes系列教程(十六)基于nginx ingress实现服务暴露
mac 上学习k8s系列(1)安装kubernetes-dashboard
在mac上学习k8s,minikube 和docker for mac 是不错的选择,二者环境搭建相对简单,都是一个单节点的最小系统,方便大家快速学习。在https://mp.weixin.qq.com/s/0kOa1SXsUKoaYuCvlsli-w 中介绍了如何在mac(m1 也可以)上搭建docker for mac,下面我们学习下如何安装kubernetes-dashboard。
golangLeetcode
2022/08/02
1.5K0
mac 上学习k8s系列(1)安装kubernetes-dashboard
kubernetes通俗易懂的ingress-nginx部署示例
pod的IP以及service IP只能在集群内访问,如果想在集群外访问kubernetes提供的服务,可以使用nodeport、proxy、loadbalacer以及ingress等方式,由于service的IP集群外不能访问,就使用ingress方式再代理一次,即ingress代理service,service代理pod。
天天向上_82634
2021/11/19
8.7K0
kubernetes通俗易懂的ingress-nginx部署示例
部署 Prometheus Operator 监控 Kubernetes 集群
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aixiaoyang168/article/details/81661459
哎_小羊
2019/05/25
1.6K0
Kubernetes折腾记4:ingress部署及使用
上一节,我们分享了如何对外暴露服务,今天我们再来看另外一种对外暴露服务的方式:ingress。那什么是ingress呢?它跟我们之前接触的暴露服务又有什么不同?
yaxin
2021/03/04
1.3K0
Kubernetes折腾记4:ingress部署及使用
ingress高可用
Ingress由两部分组成:Ingress Controller 和 Ingress 服务。
SY小站
2020/06/15
2.3K2
二进制安装Kubernetes(k8s) v1.23.6 ---(下)
1.23.3 和 1.23.4 和 1.23.5 和 1.23.6 文档以及安装包已生成。
小陈运维
2022/04/21
1.7K0
相关推荐
kubernetes-ingress(十)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验