Skip to main content

Command Palette

Search for a command to run...

Kubernetes 1.2 中利用 Ingress 简化复杂网络

Updated
2 min read

原文:Kubernetes 1.2 and simplifying advanced networking with Ingress

在 Kubernetes 中,服务和 Pod 的 IP 地址缺省只能被集群网络路由。所有边缘路由器传来的流量要么被丢弃,要么被转向。在 Kubernetes 中,我们对 Ingress 对象做了改进,用于简化传入连接进入集群服务的过程。对其进行配置,能够给服务外部可达的 URL,负载均衡,Terminate SSL,提供具名虚拟主机等大量功能。

Ingress Controller

如今,受容器或者虚拟机的影响,对 Web 服务器或者负载均衡的配置变得麻烦了。多数的 Web 服务器配置文件很像。虽说有些应用有些古怪,但是总的说来还是可以通过一些逻辑来达到目的的。在 Kuberntes 1.2 中,Ingress 实现了这些想法,Ingress 控制器就是用于处理这些特别的 Ingress “类” (可能是负载均衡的一个实例,或者复杂一些的提供 GSLB、CDN、DDoS 保护等功能的前端)中的这些个性的东西。Ingress Controller 是一个守护进程,以 Kuberntes Pod 的形式进行部署,他会监控 API 服务的 /ingress 终结点来获取对 Ingress 资源 的更新。他的任务就是实现 Ingress 请求。

为了运行下面的例子,你的 Kubternetes 集群必须仅有一个支持 TLS 的 Ingress 控制器。如果你的集群运行在云提供商环境中,首先查找一下 “kube-system” 命名空间,查找 Ingress 控制器的 RC。如果没有的话,需要部署一个 nginx 控制器 或者 用不到 100 行代码自行实现

务必花费少许时间来了解一下现存控制器的限制( GCE, nginx )。

TLS termination 和 HTTP 负载均衡

Ingress 用于承接服务,所以很适合做负载均衡以及中心化的安全配置。如果你熟悉 Go 语言,Ingress 在集群中扮演了 net/http’s “Server” 的角色。下面的例子示范了如何配置 TLS termination。负载均衡是 Ingress 的必选项目,所以只要创建了这一对象,就有了负载均衡能力。

首先创建一个测试服务。我们会运行一个简单的 Echo 服务器,用来告知我们正在运行的内容(源代码):

$ kubectl run echoheaders --image=gcr.io/google_containers/echoserver:1.3 --port=8080 $ kubectl expose deployment echoheaders --target-port=8080 --type=NodePort

如果你是在云服务提供商提供的集群上运行,确认你可以由外网通过 Nodeport 访问到这一服务。

$ NODE_IP=$(kubectl get node kubectl get po -l run=echoheaders --template '{{range .items}}{{.spec.nodeName}}{{end}}' --template '{{range $i, $n := .status.addresses}}{{if eq $n.type "ExternalIP"}}{{$n.address}}{{end}}{{end}}') $ NODE_PORT=$(kubectl get svc echoheaders --template '{{range $i, $e := .spec.ports}}{{$e.nodePort}}{{end}}') $ curl $NODE_IP:$NODE_PORT

这是一个简单的检查,如果最后一步失败了,可能需要设置一下防火墙规则

接下来创建我们的 TLS secret:

$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /tmp/tls.key -out /tmp/tls.crt -subj "/CN=echoheaders/O=echoheaders" $ echo " apiVersion: v1 kind: Secret metadata: name: tls data: tls.crt: base64 -w 0 /tmp/tls.crt tls.key: base64 -w 0 /tmp/tls.key " | kubectl create -f

配置 Ingress:

$ echo " apiVersion: extensions/v1beta1 kind: Ingress metadata: name: test spec: tls: - secretName: tls backend: serviceName: echoheaders servicePort: 8080 " | kubectl create -f -

这样就得到了一个负载均衡 IP:

$ kubectl get ing NAME RULE BACKEND ADDRESS AGE test - echoheaders:8080 130.X.X.X 4m

如果等到 Ingress 控制器把你的后端设置为健康,会看到访问该 IP 80 端口的请求会被重定向到 443 端口,并会使用指定的 TLS 进行验证。

未来

可以在 Ingress API 获得更多的信息。Ingress 还在 Beta 阶段,我们期待你的反馈。你也可以贡献控制器或者 API 代码。所有跟 "Ingress" 的内容都可以,包含 DNS、不同的 TLS 模式、SNI、4 层负载均衡、内容缓存、更多的算法和健康检查等。

More from this blog

龙虾恐慌:AIOps 又要改名了?

ChatGPT 开始,把 AI 拉近到普罗大众的面前,让无数人感受到 AI 的亲民魅力。而龙虾,则把大模型驱动的自动化能力,突然间变得水灵灵、活泼泼地走进千家万户。它不只是“风口上的猪”,而是风口本身。热度高到让 Mac mini 一度断货,不知道这在不在库克的预料之内。 每代人都有每代人的鸡蛋,春节期间,我就领了我的鸡蛋。翻出古老的 MacBook Air M1,充值各种大模型。当然了,这个工具

Mar 9, 20261 min read

再见 2025

我猜不少人以为这个号废了吧?并没有,只是今年变化有点大,一直有种抄起键盘,无从说起的感觉,所以一直偷懒到今天,2025 的最后一天。 今年是我的第四个本命年,去年末一期播客里,大内说本命年不是灾年,是变化年,有危也有机。可是讲真啊,只看到危,没看到机。 各种因缘际会,从鹅厂跳槽到前东家,已经接近四年,第一个合同期已经进入尾声。除了前两年还在云原生领域嗷嗷叫,后两年基本都是些鸡零狗碎的东西了,用老东家的术语说是——偏离主航道,可谓是前景暗淡了。 一旦确定要滚蛋,反倒心思轻松起来,每天骑着我的小红车...

Jan 5, 20261 min read

辅助编程?dora 说:我知道你很急可是请你别急

从 OpenGPT 把大模型的火烧旺了之后,这三年来,相信很多组织或摩拳擦掌、或躬身入局,希望借助聪明能干的大模型,或想偿还技术宅,或想降本增效,或想弯道超车。一时间,沉寂许久的 AIxx 又活过来了,LLM Ops、Vibe Coding、中医大模型、GPT 算命等等,全都老树发新芽,焕发了勃勃生机。那么视角拉回从业者最关注的饭碗相关的领域之一——AI 辅助开发,产生了什么触动,应该如何拥抱呢? DORA 的年度报告中给出了很有意思的结论——强者恒强。 执行摘要部分总结了几个有趣的点: 问题...

Oct 6, 20251 min read

[译]dora:ai 辅助软件开发状态报告

执行摘要 在 2025 年,科技领导者面临的核心问题已不再是“是否要采用 AI”,而是“如何实现其价值”。 DORA 的研究基于超过 100 小时的定性访谈和来自全球近 5,000 名技术专业人士的问卷调查。研究揭示了一个关键事实:AI 在软件开发中的主要角色是“放大器”。它会放大高效能组织的优势,也会凸显组织的缺陷。 关键结论:AI 是放大器 AI 投资的最大回报并非来自工具本身,而是来自组织底层系统的战略性建设: 高质量的内部平台 清晰的工作流 团队的协同能力 缺少这些基础,AI ...

Oct 2, 202514 min read

僭越了,有人在用 Rust 写 Kubernetes

一个新语言问世,最爱做的事情之一,就是重写存量软件了。 云原生喝酒 SIG 重点扶持项目——rk8s(https://github.com/rk8s-dev/rk8s) 也可以归在这个范畴里,只不过这个项目重写的东西比较大,是 Kubernetes。 从 2025 年 1 月第一个 Commit 开始,到现在有了 200 多次 Commit,十几万行代码。当然距离 Kubernetes 的几百万行代码还差得远——老马就是喜欢整这种大无畏项目。 另外该项目也是国内第一个脱离 Cargo 转向使用 ...

Sep 27, 20253 min read

【伪】架构师

342 posts