深入剖析Kubernetes
张磊
Kubernetes社区资深成员与项目维护者
立即订阅
22653 人已学习
课程目录
已完结 56 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (5讲)
开篇词 | 打通“容器技术”的任督二脉
免费
01 | 预习篇 · 小鲸鱼大事记(一):初出茅庐
02 | 预习篇 · 小鲸鱼大事记(二):崭露头角
03 | 预习篇 · 小鲸鱼大事记(三):群雄并起
04 | 预习篇 · 小鲸鱼大事记(四):尘埃落定
容器技术概念入门篇 (5讲)
05 | 白话容器基础(一):从进程说开去
06 | 白话容器基础(二):隔离与限制
07 | 白话容器基础(三):深入理解容器镜像
08 | 白话容器基础(四):重新认识Docker容器
09 | 从容器到容器云:谈谈Kubernetes的本质
Kubernetes集群搭建与实践 (3讲)
10 | Kubernetes一键部署利器:kubeadm
11 | 从0到1:搭建一个完整的Kubernetes集群
12 | 牛刀小试:我的第一个容器化应用
容器编排与Kubernetes作业管理 (15讲)
13 | 为什么我们需要Pod?
14 | 深入解析Pod对象(一):基本概念
15 | 深入解析Pod对象(二):使用进阶
16 | 编排其实很简单:谈谈“控制器”模型
17 | 经典PaaS的记忆:作业副本与水平扩展
18 | 深入理解StatefulSet(一):拓扑状态
19 | 深入理解StatefulSet(二):存储状态
20 | 深入理解StatefulSet(三):有状态应用实践
21 | 容器化守护进程的意义:DaemonSet
22 | 撬动离线业务:Job与CronJob
23 | 声明式API与Kubernetes编程范式
24 | 深入解析声明式API(一):API对象的奥秘
25 | 深入解析声明式API(二):编写自定义控制器
26 | 基于角色的权限控制:RBAC
27 | 聪明的微创新:Operator工作原理解读
Kubernetes容器持久化存储 (4讲)
28 | PV、PVC、StorageClass,这些到底在说啥?
29 | PV、PVC体系是不是多此一举?从本地持久化卷谈起
30 | 编写自己的存储插件:FlexVolume与CSI
31 | 容器存储实践:CSI插件编写指南
Kubernetes容器网络 (8讲)
32 | 浅谈容器网络
33 | 深入解析容器跨主机网络
34 | Kubernetes网络模型与CNI网络插件
35 | 解读Kubernetes三层网络方案
36 | 为什么说Kubernetes只有soft multi-tenancy?
37 | 找到容器不容易:Service、DNS与服务发现
38 | 从外界连通Service与Service调试“三板斧”
39 | 谈谈Service与Ingress
Kubernetes作业调度与资源管理 (5讲)
40 | Kubernetes的资源模型与资源管理
41 | 十字路口上的Kubernetes默认调度器
42 | Kubernetes默认调度器调度策略解析
43 | Kubernetes默认调度器的优先级与抢占机制
44 | Kubernetes GPU管理与Device Plugin机制
Kubernetes容器运行时 (3讲)
45 | 幕后英雄:SIG-Node与CRI
46 | 解读 CRI 与 容器运行时
47 | 绝不仅仅是安全:Kata Containers 与 gVisor
Kubernetes容器监控与日志 (3讲)
48 | Prometheus、Metrics Server与Kubernetes监控体系
49 | Custom Metrics: 让Auto Scaling不再“食之无味”
50 | 让日志无处可逃:容器日志收集与管理
再谈开源与社区 (1讲)
51 | 谈谈Kubernetes开源社区和未来走向
答疑文章 (1讲)
52 | 答疑:在问题中解决问题,在思考中产生思考
特别放送 (1讲)
特别放送 | 2019 年,容器技术生态会发生些什么?
结束语 (1讲)
结束语 | Kubernetes:赢开发者赢天下
特别放送 | 云原生应用管理系列 (1讲)
基于 Kubernetes 的云原生应用管理,到底应该怎么做?
深入剖析Kubernetes
登录|注册

39 | 谈谈Service与Ingress

张磊 2018-11-21
你好,我是张磊。今天我和你分享的主题是:谈谈 Service 与 Ingress。
在上一篇文章中,我为你详细讲解了将 Service 暴露给外界的三种方法。其中有一个叫作 LoadBalancer 类型的 Service,它会为你在 Cloud Provider(比如:Google Cloud 或者 OpenStack)里创建一个与该 Service 对应的负载均衡服务。
但是,相信你也应该能感受到,由于每个 Service 都要有一个负载均衡服务,所以这个做法实际上既浪费成本又高。作为用户,我其实更希望看到 Kubernetes 为我内置一个全局的负载均衡器。然后,通过我访问的 URL,把请求转发给不同的后端 Service。
这种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的 Ingress 服务。
所以,Ingress 的功能其实很容易理解:所谓 Ingress,就是 Service 的“Service”。
举个例子,假如我现在有这样一个站点:https://cafe.example.com。其中,https://cafe.example.com/coffee,对应的是“咖啡点餐系统”。而,https://cafe.example.com/tea,对应的则是“茶水点餐系统”。这两个系统,分别由名叫 coffee 和 tea 这样两个 Deployment 来提供服务。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入剖析Kubernetes》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(35)

  • 虎虎❤️
    思考题:
    spec:
      rules:
      - host: www.mysite.com
        http:
          paths:
          - backend:
              serviceName: site-svc
              servicePort: 80
      - host: forums.mysite.com
        http:
          paths:
          - backend:
              serviceName: forums-svc
              servicePort: 80
    2018-11-21
    13
  • Dem
    Nginx Ingress Controller的mandatory.yaml地址改掉了。现在的命令:
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
    2019-06-12
    9
  • busman
    老师,我目前遇到个场景,就是一个非常耗资源的服务,需要容器化,部署在k8s集群中。目前问题就是这种大资源程序怎么打包(也是直接运行在一个容器里吗?),如何调度?是否有通用方案。
    这个程序大致是一个深度学习的算法,有tensorflow很耗cpu(监控来看,直接在一个容器里运行,能到十几核),也会加载很大的模型(内存占用6G),就这样的场景,老师能点拨一下吗?感谢
    2018-11-21
    1
    6
  • 峰哥
    Ingress只支持7层的话,tcp协议的service怎么处理?
    2019-01-16
    2
    3
  • 学习者
    问题描述:前后端分离,但是同一域名下既有前端代码(部署在nginx中,以静态文件方式访问。),又用nginx 的proxy_pass ,根据url (location /xx/ {})反向代理做了后端。
    方案 1:client -> lb -> ingress -> nginx (nginx 只部署前端,ingress 配置后端连接pod 的service,)
    方案2 : client -> nginx ( 后端采用nodeport暴露出来,采用问题描述方法部署)
    请问这两种方案的可行性?或者还有什么更好的方案吗?
    2018-12-24
    3
  • 小小笑儿
    感觉是因为nodeport之类的没有路由功能而出现的ingress,而且ingress还是需要由loadbalance之类的暴露给集群外部访问
    2018-11-22
    3
  • 火车飞侠
    老师,如果我后端服务是https的,ingress如何定义呢?
    2018-12-05
    2
  • 黄巍
    「但是,相信你也应该能感受到,由于每个 Service 都要有一个负载均衡服务,所以这个做法实际上既浪费成本又高。」没错,下周的 KubeCon 我会做一个关于共享 4 层 LoadBalancer 的session :)

    作者回复: 听起来就很给力

    2018-12-05
    1
    2
  • mazhen
    总结一下,从集群外访问到服务,要经过3次代理:

    访问请求到达任一宿主机,会根据NodePort生成的iptables规则,跳转到nginx反向代理,
    请求再按照nginx的配置跳转到后台service,nginx的配置是根据Ingress对象生成的,
    后台service也是iptables规则,最后跳转到真正提供服务的POD。

    另外,如果想查看nginx-ingress-controller生成的nginx配置,可以这么做:

    $ kubectl get pods -n ingress-nginx
    NAME READY STATUS RESTARTS AGE
    nginx-ingress-controller-85d94747dd-lsggm 1/1 Running 0 3h45m

    $ kubectl exec nginx-ingress-controller-85d94747dd-lsggm -it --namespace="ingress-nginx" -- bash

    $ cat /etc/nginx/nginx.conf
    ...
    $ exit
    2018-11-21
    2
  • 小猪
    请问ingress里配置的域名访问地址,那么集群外部怎么根据域名访问到k8s的服务呢?
    2019-06-13
    1
  • Adam
    感觉再加上一层ingress,又多了一层转发,性能上会不会损失比较大。

    作者回复: 多层lb的方案不是挺普遍的?

    2018-12-10
    1
  • 勤劳的小胖子-libo
    老师,为什么在创建 Ingress 所需的 SSL 证书(tls.crt)和密钥(tls.key)之后,使用curl命令还需要加上--insecure.
    "curl --resolve cafe.example.com:$IC_HTTPS_PORT:$IC_IP https://cafe.example.com:$IC_HTTPS_PORT/tea --insecure"

    我的理解是:创建的SSL证书和密钥没有通过CA验证,所以要加上--secure. 对吗?

    作者回复: 对的,假证书,哈哈

    2018-11-27
    1
  • 蓝魔丶
    学习过程中遇到一些一直想不通的问题,麻烦能怎么联系老师解答下吗?
    2018-11-24
    1
  • @Yang
    请教老师一个问题:我想一次export 集群里namesapces pv pvc pod deploy svc ingress 等等所有的配置,改如何做?
    不胜感激
    2018-11-22
    1
  • zylv
    ingress-controller 里面如果不配置域名,配置ip,可以吗

    作者回复: 公有IP可以

    2018-11-21
    1
  • “一旦 Ingress 对象被更新,nginx-ingress-controller 就会更新这个配置文件”,张老师您好, 请问controller修改该文件的方式有谁来执行?另外确认一下,configmap仅在nginx启动时才有效对吧。也就是后期每一个ingress对象并不会更新configmap。我看nginx-ingress的源码没找到您提到的关于配置文件修改的逻辑。
    2019-11-26
  • benben
    老师,问一个困扰我的问题,ingress-nginx 通过nodePort暴露的端口为什么通过netstat查看不到呢?
    2019-10-31
  • 张若初
    ingress 和 ingress cintroller关联在一起的
    2019-10-13
  • 蛋蛋
    一个集群里能否有多个ingress controller
    2019-08-11
    1
  • Geek_53fe7f
    如果访问公网 ip : 80 ,让其转到 k8s 集群的ingress 上的话,还需要配置一个nginx 做反向代理,这样理解对么?
    2019-08-04
收起评论
35
返回
顶部