Kubernetes Podcast from Google - Antrea, with Antonin Bas 封面

Antrea, with Antonin Bas

Antrea, with Antonin Bas

本集简介

For pods to talk to each other in Kubernetes, you need a virtual network. Antonin Bas is a staff engineer at VMware and a maintainer of Project Antrea; a CNI plugin which provides such a network. He talks to Adam and Craig about encapsulation, virtualisation, and 10,000 year old Finnish artifacts. Do you have something cool to share? Some questions? Let us know: web: kubernetespodcast.com mail: kubernetespodcast@google.com twitter: @kubernetespod Chatter of the week Over the top Halloween light show Bird of the Year Click here to take the Audience Survey: thank you for helping us make a better show for you! News of the week An update on D2IQ's support of Mesos Docker's plan for Year 2 Google Cloud mitigates the impact of Docker's Year 1 changes Quay and Harbor also KubeLinter from StackRox GitHub Hashicorp Nomad 1.0 Beta Vitess 8 GA gRPC in the real world: Container Runtime Interface by Bob Reselman RIP Dan Kohn Links from the interview Visual Basic Professor Nick McKeown, co-founder of Nicira Barefoot Networks P4, in the Open Networking Foundation Software-defined networking Virtual networking VLAN VXLAN The Kubernetes network model Network plugins: Flannel Weave Net Calico Cilium kubenet Antrea The Antrea Net Antrea, Finland; now Kamennogorsk, Russia Container Network Interface (CNI) veth pairs Open vSwitch (OVS) NodeIPAM Controller CNI plugin chaining Installing Antrea with other CNI plugins Antrea features: Network policy IPSEC between nodes Antrea on GitHub Antonin Bas on Twitter and GitHub

双语字幕

仅展示文本字幕,不包含中文音频;想边听边看,请使用 Bayt 播客 App。

Speaker 0

大家好,欢迎收听谷歌出品的Kubernetes播客。

Hi, and welcome to the Kubernetes Podcast from Google.

Speaker 0

我是克雷格·博克斯。

I'm Craig Box.

Speaker 1

我是亚当·格利克。

And I'm Adam Glick.

Speaker 0

你今年过万圣节的时候,有保持社交距离吗?

Did you enjoy a socially distanced Halloween?

Speaker 1

当然有。

Oh, yes.

Speaker 1

我们确实过了。

I did.

Speaker 1

我们给小孩子打扮了一下,然后在 neighborhood 里转了转,主要是看看周围的装饰,也留意了大家为了保持社交距离想出的各种办法。

We got a chance to dress the little one up and walk around, mostly just enjoy the decorations in the area and also take a look at all the things that people had done to be socially distanced.

Speaker 1

有人在屋檐下拉了长长的滑道,把糖果滑下来;有人在门口摆了袋子,或者放了张桌子,上面堆满糖果,确保大家即使和往年不一样,也能好好过个万圣节。

So people had set up long gutters up on a top that they'd slide candy down or put bags out in front or a table with things on to really make sure that people could enjoy the Halloween even if was a little different than normal.

Speaker 0

有没有什么灯光

Any light

Speaker 1

秀?

shows?

Speaker 1

虽然没什么特别像网上看到的那些,但节目简介里有个链接,展示了一个真正非常棒的灯光秀,是一位有很多时间和材料的人做的,他为金属乐队的《Enter Sandman》打造了一场令人惊叹的表演。

Nothing quite what we've seen online, but there's a link in the show notes to one that is truly, truly impressive from someone who has a lot of time and materials on their hands and created an incredible show for Enter Sandman from Metallica.

Speaker 1

大家可以去看看。

So check that one out.

Speaker 1

挺有意思的。

It's a good watch.

Speaker 0

上周是万圣节周,这周呢,当然是选举周了。

Now it was Halloween week last week, and then this week, of course, it is election week.

Speaker 0

我们不确定大家什么时候听到这期节目,但重要的是要意识到,现在是投票的时候了。

And we're not sure when you are listening to this, but it is important to realize that it is time to go vote for bird of

Speaker 1

今年的选举。

the year.

Speaker 1

没错。

That's right.

Speaker 1

你选好你的鸟了吗?

Have you chosen your bird?

Speaker 0

我还没选,不过还有几周时间可以慢慢考虑。

I haven't, but I have a couple weeks to think about it.

Speaker 0

‘年度之鸟’是新西兰森林与鸟类协会每年举办的一项活动,介绍一些新西兰本土鸟类,其中有些濒临灭绝,鼓励大家挑一只心仪的鸟,然后为它拉票。

Bird of the year is an annual event run by the Forest and Bird Association on New Zealand looking at some of New Zealand's native birds, some more endangered than others, and encouraging you to pick one and then go out and campaign for it.

Speaker 0

虽然这没其他选举那么严肃,但我真心推荐你参与一下,支持你选中的那只鸟。

And it's a little bit lower stakes than some other elections that have been happening around this time, but I thoroughly encourage you to check it out and get behind one.

Speaker 0

我们大概下周就能定下选择,到时候再看看最终谁能胜出。

We will probably have made our picks by next week, and we'll have to see who ends up victorious.

Speaker 1

再次感谢所有已经填写了我们听众调查的朋友们,调查地址是 kubernetespodcast.com/survey。

Thanks again to all of you who have already filled out our audience survey at kubernetespodcast.com/survey.

Speaker 1

还没填的朋友们,你们只剩最后一周时间了。

For those who haven't yet, you've got one week left.

Speaker 1

调查会持续到11月10日,请花点时间访问 kubernetespodcast.com/survey,花三分钟填一下问卷,告诉我们你对这个播客的看法,以及我们怎样才能更好地服务云原生社区。

We're keeping the survey open until November 10, so please take a moment and go to kubernetespodcast.com/survey and take the three minutes it should take you to fill out the survey to let us know what you think of the podcast and how we can continue to make this the best podcast for the cloud native community.

Speaker 1

谢谢。

Thanks.

Speaker 0

我们来说说最新动态。

Let's get to the news.

Speaker 0

D2IQ(原Mesosphere)本周宣布,公司将停止开发基于Mesos的DCOS平台。

D2IQ, formerly Mesosphere, announced this week that the company will stop development of their Mesos based DCOS platform.

Speaker 0

联合首席执行官兼联合创始人托比·克瑙普表示,公司将不再继续运营DCOS,而是把全部精力转向基于Kubernetes的DKP平台。

Co CEO and co founder Toby Knaupp announced they will no longer be a co company, instead transitioning all of their efforts to their Kubernetes based platform DKP.

Speaker 0

在帮助现有客户完成过渡期间,公司仍会为他们提供支持。

Support will still be available for existing customers of DCOS as the company works to transition them.

Speaker 0

公告中提到一句意味深长的话:公司已‘调整规模,变得更灵活高效’,这已被证实意味着裁员。

The announcement contains the ominous statement that they have quote, resized the company to become more nimble and streamlined, which has been confirmed to mean layoffs.

Speaker 1

自从Docker宣布转型为专注于支持Kubernetes生态的开发者工具公司,已经过去一年了。

It's been a year since Docker announced their pivot to a developer tools company supporting the Kubernetes ecosystem.

Speaker 1

上周,他们公布了第二年的规划,包括提供更明确的开发环境配置、更多集成自动化流水线的镜像管理工具,以及更多官方容器镜像。

Last week, they outlined their expectations for year two, including prescriptive development environments, more image management tools with automation pipeline integration, and more official container images.

Speaker 0

Docker 为实现盈利所采取的措施之一,就是对容器镜像的拉取数量设限,这项规定现在已经生效了。

Part of Docker's plan to become profitable was to implement limits on pools of container images, which has now come into effect.

Speaker 0

不少服务商已经提出了应对方案或建议。

A number of providers have offered workarounds or suggestions.

Speaker 0

默认情况下,GKE 会从 Google 容器镜像仓库(GCR)中缓存的最常用 Docker Hub 镜像里拉取。

By default, GKE will pull from a cache of the most common Docker Hub images that is hosted on Google Container Registry or GCR.

Speaker 0

谷歌本周发布了一篇文章,指导用户如何识别依赖 Docker Hub 的组件,并直接把这些镜像迁移到 GCR。

A post from Google this week outlines how you can identify dependencies that are hosted on Docker Hub and move those images to GCR directly.

Speaker 0

红帽和 VMware 也分别发布了文章,介绍如何使用 Quay 和 Harbor 来运行不受拉取限制的镜像仓库。

Red Hat and VMware also posted about how you can use Quay and Harbor respectively to run registries without pull limits.

Speaker 1

安全公司 StackRox 推出了 KubeLinter,这是一个开源的静态分析工具,用于检查 Kubernetes 的 YAML 文件和 Helm 图表,确保其中的应用符合最佳实践。

Security vendor StackRox has released KubeLinter, an open source static analysis tool that checks Kubernetes YAML files and Helm charts to ensure the applications represented in them adhere to best practices.

Speaker 1

这个工具用 Go 语言开发,可以通过命令行运行。

The tool is written in Go and runs at the command line.

Speaker 1

官方公告提到,这还是一个 alpha 版本,后续在正式发布前还可能有不兼容的改动。

The release calls out that it's an alpha release and that breaking changes could still come to the product as it moves through its release stages.

Speaker 0

HashiCorp 发布了 Nomad 1.0 的测试版,这可能是目前最后一个支持在云端和本地部署容器及非容器应用的非 Kubernetes 编排系统。

Hashicorp announced the one point zero beta of Nomad, possibly the final remaining non Kubernetes orchestrator to deploy containerized and non containerized applications across cloud and on premises environments.

Speaker 0

这次更新主要聚焦稳定性,为产品迈向正式版做准备,企业版还新增了动态调整应用规模的功能。

This release is largely about stability as the product moves towards GA, but includes a new dynamic application sizing feature in the enterprise version.

Speaker 0

命名空间功能已从企业版移至开源版,同时新增了可视化集群拓扑结构的界面功能。

Namespaces have been moved from enterprise to open source, and a new UI feature allows you to visualize the topology of your cluster.

Speaker 1

Vitess 推出了第 8 版的正式发布,展现了它的成熟度。

Vitess is showing off its fitness with general availability of version eight.

Speaker 1

作为一套用于水平扩展 MySQL 的集群系统,Vitess 现在支持更多主流编程语言和框架,还兼容 MySQL Workbench 等工具。

Vitess, a clustering system for horizontally scaling MySQL, has increased its MySQL client compatibility with support for a host of popular languages and frameworks, as well as tooling like MySQL Workbench.

Speaker 1

v 复制流程增加了更多日志和监控指标,同时实验性地加入了在线修改表结构和故障自动切换功能。

More logging and metrics were added to the v replication workflow and new capabilities for online schema changes and work failover support were added as experimental.

Speaker 1

需要注意的是,这次更新有一些不兼容的改动,部署前请务必查阅发布说明。

Of note, there are some breaking changes when it comes to compatibility, so check with the release notes before you deploy.

Speaker 0

最近,Cog Art Tech 的鲍勃·卢塞尔曼在《可编程网络》上发表了一系列文章,深入探讨了 gRPC 的起源、工作原理以及如何使用它。

In a recent blog series on programmable web, Bob Russelman from Cog Art Tech has been looking at gRPC, where it came from, how it works, and how you use it.

Speaker 0

最新几篇文章聚焦于实际应用场景,比如介绍了 Kubernetes 容器运行时接口的具体实现方式。

The latest posts talk about real world applications, including an overview of how the Kubernetes container runtime interface is implemented.

Speaker 0

这九篇文章非常值得一读,能帮你深入了解 RPC 和 API 设计。

The nine article series is a good read to learn about RPC and API design.

Speaker 1

最后,我们想花一点时间,纪念我们社区一位非常重要、却在本周离世的成员。

Finally, we wanna take a moment and acknowledge a very important member of our community who passed away this week.

Speaker 1

丹·科恩是云原生社区的奠基人之一,他作为 CNCF 的创始执行董事,亲手推动了这个组织的成长。

Dan Kohn helped build the cloud native community and specifically the CNCF as its founding executive director.

Speaker 1

他是一位富有远见的领导者,真正把 CNCF 打造成了今天这个改变整个计算行业的中坚力量。

He was a visionary leader who truly built the organization to make it the force in computing that we are all benefiting from today.

Speaker 1

我们会深深怀念你。

You'll be missed,

Speaker 0

以上就是今天的全部新闻。

And that's the news.

Speaker 1

安东宁·巴是VMware的高级工程师,也是Project Entrea的维护者。这个项目是一个基于Open vSwitch的Kubernetes网络插件,他努力让它尽可能简单地部署和排错。

Antonin Bas is a staff engineer at VMware and a maintainer for Project Entrea, a Kubernetes network plugin based on Open vSwitch, which he tries to make as simple as possible to deploy and troubleshoot.

Speaker 1

安东宁还是P4语言的核心贡献者,这是Linux基金会的一个项目,用于实现网络基础设施的可编程性。

Antonin is also a core contributor to the p four language, a Linux foundation project which enables programmability in the network infrastructure.

Speaker 1

欢迎来到节目,安东宁。

Welcome to the show, Antonin.

Speaker 2

谢谢。

Thanks.

Speaker 2

这是我第一次参加播客,能来我真的很开心。

I'm very happy to be here for my first podcast ever.

Speaker 0

完全不用紧张。

Nothing to worry about at all.

Speaker 0

你是在法国长大的。

You grew up in France.

Speaker 0

你在那里读完了本科,之后去了斯坦福。

You got your undergraduate degree there, but then you went to Stanford.

Speaker 0

这事儿是怎么发生的?

How did that happen?

Speaker 2

我觉得我这代人大多都差不多,最早是通过电子游戏接触到电脑的。

I think I got a pretty typical story from my generation where I got into computers through video games.

Speaker 2

90年代末我玩了很多游戏,到现在我可能还是玩得有点太多。

I played a lot of video games in the late 90s, and I still play video games today probably more than I should.

Speaker 2

但正是这些游戏让我对电脑产生了兴趣。

But that's how I got into computers.

Speaker 2

后来我爸爸给了我一些启发,他大学时有点零星的编程记忆。

And then I got into programming through my dad who had some distant memories from his college days.

Speaker 2

他本人并不是程序员。

He's not a programmer himself.

Speaker 2

也不在软件行业工作。

He's not in the software industry.

Speaker 2

但他跟我说:‘你不是挺喜欢电脑的吗?’

But he told me, Oh, you like computers.

Speaker 2

你应该试着写个程序。

You should try writing a program.

Speaker 2

他建议我从BASIC语言开始,这在当时真是挺出人意料的。

And he recommended me to try the BASIC language, which is a very surprising recommendation for the time.

Speaker 2

大概是2003年或者2004年吧。

Think it was like 2003, 2004.

Speaker 2

那时候早没人用BASIC了,对吧?

Nobody was using BASIC anymore, right?

Speaker 0

那会是Visual Basic吗?

So was that Visual Basic then?

Speaker 2

应该是Visual Basic,没错。

I think it was Visual Basic, yes.

Speaker 2

但就算Visual Basic,那时候也过时了。

But even Visual Basic was dated at the time.

Speaker 2

我不想惹谁不高兴,不过

Don't want to make anyone mad, but

Speaker 0

我觉得

I think

Speaker 2

确实是这样。

it was the case.

Speaker 2

我写了一些简单的程序,很快就转去学C++,还上网看了些教程。

I wrote some simple programs, and then I quickly graduated to C plus plus and took some tutorials online.

Speaker 2

那时候大家都是这么学的,看这些教程。

That's how you did things at the time, took those tutorials.

Speaker 2

那时候YouTube还没火起来。

It was before YouTube was a big thing.

Speaker 2

我做过一点网页编程,不算太复杂。

I did a little bit of web programming, nothing too complicated.

Speaker 2

很快我就意识到,我想在科技行业干一辈子。

Basically, I realized pretty quickly I wanted to do a career in tech.

Speaker 2

我去法国上了大学。

I went to college in France.

Speaker 2

那时候我就想,如果真想在科技行业干一番事业,斯坦福应该是绝佳的选择。

Then I was like, if I want to do a career in tech, I think Stanford would be a great place to go.

Speaker 2

于是我申请了几所大学,美国和英国的都报了。

And so I applied to several universities, both in The US and in The UK.

Speaker 2

最后我选了斯坦福,就这样去了那里。

Eventually, I chose Stanford and that's how I got there.

Speaker 1

你后来做了计算机网络,这跟我印象里一般人专注的方向不太一样,尤其是搞游戏的人,通常都盯着图形渲染。

You've gone into computer networking, which isn't the area I normally think of people focusing on, especially if you're into video games where graphics are such a big thing in it.

Speaker 1

那为什么偏偏是网络吸引了你呢?

Why was networking the thing that attracted you?

Speaker 2

这行现在真不算酷了,至少好多年都没人觉得它时髦了。

It's not really the sexy field of computer science, at least not anymore and not for a long time right now.

Speaker 2

以前大家追捧的是图形技术。

It used to be graphics, guess.

Speaker 2

现在人人都在追机器学习和大数据。

Now everyone is into machine learning and big data.

Speaker 2

但我特别想弄明白互联网到底是怎么运行的,对分布式应用也很感兴趣。

But I really wanted to understand how the Internet worked and I was interested in distributed applications.

Speaker 2

这种系统该怎么搭建呢?

How would you build them?

Speaker 2

它们之间又是怎么通信的?

How do they communicate with each other?

Speaker 2

怎么才能做出既可扩展又稳定的系统?

How would you build scalable and resilient systems?

Speaker 2

正因如此,我才走上了计算机网络这条路。

That's how I got into computer networking.

Speaker 2

其实,到了斯坦福之后,我认识了一位叫尼克·麦基翁的教授,他是电气工程和计算机科学系的教授。

Really, it's when I got to Stanford, I met a professor there called Nick McKeown, who is a professor of electrical engineering and computer science.

Speaker 2

他被认为是软件定义网络的奠基人之一。

And he's considered one of the founders of software defined networking.

Speaker 2

我刚到斯坦福那会儿,他正好刚经历完Nicira被VMware收购的事。

At the time I met him, just after getting to Stanford, he had just gone through Nicira acquisition by VMware.

Speaker 2

他是Nicira的联合创始人之一。

He's one of the co founders of Nicira.

Speaker 2

我跟他见了面。

I met with him.

Speaker 2

我成了他讲的计算机网络导论课的助教。

I became a teaching assistant for his Intro to Computer Networking class.

Speaker 2

我做了他支持的一些研究,也是通过他,我才得到了第一份工作。

I did some research that he sponsored, and he's also how I got my first job.

Speaker 2

他对我的影响很大。

It's been a big influence on me.

Speaker 0

你觉得,要教别人技术,非得自己真正理解不可吗?

Do you find that you really have to understand the technology to be able to teach it to other people?

Speaker 2

是的,毫无疑问。

Yes, definitely.

Speaker 2

不然的话,我根本没法安心跟别人解释这些内容。

Otherwise, I just don't feel comfortable explaining things to people.

Speaker 0

我的意思是,如果你根本不懂,你该怎么给别人讲呢?

I mean, how would you even explain things to people if you

Speaker 2

不明白它的本质,我就不敢开口解释。

don't know what it's about?

Speaker 2

有时候我学东西特别慢,就是因为我没搞透之前,心里总不踏实,一定要弄明白才行。

Sometimes it takes me a long time to learn things just because I don't feel comfortable until I get to the bottom of it and I fully understand it.

Speaker 2

等我真的搞懂了,才觉得有底气去教别人。

Once I've learned something, I usually feel comfortable teaching it.

Speaker 0

那时候,开源在斯坦福这样的地方已经特别火了。

Now around that time, open source was obviously a big thing at places like Stanford.

Speaker 0

你在学校的时候,有参与过开源项目吗?

Was that something you were involved with while you were at school?

Speaker 2

没有。

No.

Speaker 2

其实我毕业离开斯坦福之后,才接触到开源的。

Actually, I didn't get to open source until after I graduated from Stanford.

Speaker 2

也许我做过一些小贡献,但具体什么都想不起来了。

Maybe I did some minor contributions, but actually I can't remember anything.

Speaker 2

我真正接触开源是在我第一份工作开始的时候。

I really got into open source when I started my first job.

Speaker 1

是你的兴趣、你做的事,还是公司做的方向影响了你?

Was that factor a of what you were doing, what you were interested in, or what the company was doing?

Speaker 2

肯定是公司做的方向影响了我。

Definitely what the company was doing.

Speaker 2

说来有趣,我原本打算硕士毕业后去纽约一家高频交易公司上班。

Funny story, I was originally going to join an high frequency trading firm in New York at the end of my master's.

Speaker 2

我跟尼克——就是我刚才提到的尼克·麦基温——聊了聊,跟他说:‘尼克,我跟你做过一段时间项目,能给我写封推荐信吗?’

I talked to Nick, Nick McKeown that I just mentioned, and I was like, Nick, I'd like a recommendation letter to go there because I've been working with you for a bit now.

Speaker 2

行啊,推荐信我给你写。

Okay, I'll give you your recommendation letter.

Speaker 2

但在这之前,你得帮我个忙,去帕洛阿尔托见见那群人,他们正在搞一个要彻底改变网络技术的初创公司。

But first, you have to do me a favor and you have to go meet those guys in Palo Alto who are building a startup which is going to revolutionize networking.

Speaker 2

当然,他是那家初创公司的联合创始人之一。

Of course, he was one of the co founders of that startup.

Speaker 0

所以我去跟他们聊了聊

So I went to talk to

Speaker 2

最后我决定留下来。

them and eventually I decided to stay.

Speaker 2

就这样我加入了那家公司,所以现在我不在金融行业工作了。

That's how I joined that company and I'm not in finance today.

Speaker 2

回到刚才的问题,我加入的那家公司叫Barefoot Networks,他们推出了一种全新的网络设备和编程范式,可以说是软件定义网络革命的下一步。

Going back to the question, the company that I joined, Barefoot Networks, was introducing a new paradigm for designing network devices and programming them, like the next step in the software defined networking revolution.

Speaker 2

这个新范式是围绕一种叫P4的编程语言建立的,它是一种领域特定语言,用来给网络设备编程,并定义单个网络数据包该如何处理。

This whole paradigm was built around a programming language called P4, which is like a domain specific language to program network devices and define how individual network packets should be processed.

Speaker 2

公司战略的一大块,就是围绕P4语言构建一个强大的开源生态系统,包括一整套工具链,这些工具链都采用Apache许可证授权。

A big part of the company's strategy was to build a strong open source ecosystem around that P4 programming language with an entire tool chain that was to be licensed under Apache.

Speaker 2

比如,有P4的编译器、用来模拟P4程序的软件交换机、面向P4的SDN API等等。

You had a compiler for P4, a software switch to emulate P4 programs, SDN APIs for P4 and so on.

Speaker 2

我在Barefoot的工作主要就是维护和参与这个生态系统。

Pretty much my only job at Barefoot was to maintain this ecosystem and contribute to this ecosystem.

Speaker 2

这正是公司战略的核心,所以我花了大量时间做开源。

So that was really a big part of the company strategy, that's how I spent so much time doing open source.

Speaker 1

所以你为P4语言做了很多贡献,它现在也是Linux基金会的一部分。

So you're contributing a lot to the p four language, is also part of the Linux foundation.

Speaker 1

为什么不用现有的语言,反而要开发一门新语言呢?

Why a new language rather than using one of the existing languages?

Speaker 2

就像Visual Basic那样。

Like Visual Basic.

Speaker 2

就像Visual Basic那样。

Like Visual Basic.

Speaker 2

P4是一门领域特定语言。

P four is a domain specific language.

Speaker 2

这门语言内置了专为网络和数据包处理设计的语法结构。

You have constructs built into the language which are specific to networking and packet processing.

Speaker 2

那时候虽然已经有几篇论文探讨过类似的概念,但还没有一个成熟的编程语言来定义数据包处理流程。

So you had a few papers at the time around similar concepts, but you didn't have a well established programming language to define packet processing pipelines.

Speaker 2

不过如果你看P4,它的某些部分确实像C语言。

But if you look at P4, in a way some parts of it are C like.

Speaker 2

你可以用标准的运算符进行算术运算。

You can do arithmetic using standard operators.

Speaker 2

至少有一部分语法是命令式的。

Some parts of it at least are imperative.

Speaker 2

如果你看一些P4的代码片段,它会让你想起C语言。

If you look at some selected snippets of P4, it can remind you of C.

Speaker 0

很多人在早期都经历过网络布线、插电缆的时代。

A lot of people will have gone through networking back when it was plugging cables into switches and so on.

Speaker 0

但到了云时代,有些人可能根本没接触过软件定义网络,因为现在根本不用操心电缆怎么插了。

If you move on to cloud, some people may have missed the whole software defined networking space because we don't really need to have to worry about how cables are plugged in anymore.

Speaker 0

这些事有人专门负责。

We have someone do that.

Speaker 0

如果你要向一个对这个领域完全不了解的人解释什么是软件定义网络,你会怎么说?

How would you define software defined networking for someone who's not familiar with the space?

Speaker 2

我觉得这个领域有两大变革:虚拟网络和软件定义网络。

I think there are two big revolutions that happen in that space: virtual networking and software defined networking.

Speaker 2

我认为这两者有关联,但本质上是不同的。

I would say the two are related, but they're distinct from each other.

Speaker 2

虚拟网络指的是为你的虚拟化工作负载创建独立的虚拟网络。

Virtual networking is the ability to create virtual networks for your virtualized workloads.

Speaker 2

就像多台虚拟机可以共享同一台物理服务器一样,你也可以定义多个虚拟网络,让它们共用同一套物理网络基础设施。

Just like you can have multiple virtual machines sharing the same physical servers and running on the same physical servers, you can define multiple virtual networks which are going to share the same network physical infrastructure.

Speaker 2

同一台服务器上的虚拟机可以属于不同的租户。

Virtual machines on the same server can have different tenants.

Speaker 2

虚拟网络还能支持多租户,把各个工作负载隔离开来。

Virtual networking can also support multi tenancy and isolate your workloads.

Speaker 2

通常的做法是,为每个租户搭建一种叫覆盖网络的结构,比如用VXLAN这样的技术。

The way you would typically do that, for example, is for each tenant, you can build what we call an overlay network using a technology like VXLAN.

Speaker 2

在这种情况下,虚拟交换机就变得非常重要,因为它们要作为覆盖网络的终止点。

And in that case, virtual switches are very important because they're going to act as termination endpoints for your overlay network.

Speaker 2

至于下面的物理网络,也就是基础网络架构,其实一点都没变。

As far as the physical network underneath what we can call the underlying network, the underlying network fabric is concerned, nothing has changed.

Speaker 2

它根本不知道正在使用VXLAN。

It's not aware that VXLAN is being used.

Speaker 2

这些技术都是通过VXLAN之类的覆盖技术来构建虚拟网络的。

Those are building virtual networks using overlay technologies like VXLAN.

Speaker 2

所以虚拟交换机变得至关重要,因为那时候还没有任何物理网络设备能支持VXLAN这类新技术,也无法充当它们的终止点。

So virtual switches became very important for that because at the time you didn't have any physical network device that was able to support those new technologies like VXLAN and act as termination endpoints for them.

Speaker 0

以前我们可以通过配置交换机的端口来划分VLAN,这就相当于在上面构建了一个虚拟网络。

We used to be able to take a switch and configure certain ports to be on a VLAN, which would mean that effectively it was like, you say, a virtualized network on top.

Speaker 0

VXLAN里的这个X是从哪儿来的?

Where does the X come from in VXLAN?

Speaker 2

其实虚拟网络这个概念并不是什么新东西。

Actually virtual networking, it's not like a new concept.

Speaker 2

就像VLAN里的V,你说了,代表的是虚拟。

Like the V in VLAN, as you say, it stands for virtual.

Speaker 2

所以这是一种方法,让你在一个二层网络上做分割,划分给多个租户,每个租户分配一个VLAN ID,彼此网络完全隔离。

So it was a way to say, I have one L2 network and I'm going to splice it, shard it or whatever between multiple tenants and they're all going to receive a VLAN ID and those networks are going to be independent.

Speaker 2

但这么做会遇到不少问题。

But then you run into quite a few issues.

Speaker 2

首先,VLAN标签的位数太小了。

First, the VLAN tag is quite small.

Speaker 2

最多只能支持四千个不同的VLAN。

You can only support four ks different VLANs.

Speaker 2

它本质上还是个二层网络。

It's still like an L2 network.

Speaker 2

扩展性不太好。

It doesn't scale that well.

Speaker 2

而VXLAN则定义了一套新的协议头部。

With VXLAN, you define some new protocol headers.

Speaker 2

这些头部字段里,你可以自由填入任何内容。

You can basically put whatever you want in those headers.

Speaker 2

VXLAN里的网络标识符有24位长。

The network identifier in VXLAN, it's 24 bits.

Speaker 2

这样一来,支持的租户数量远不止四千个了。

So you get way more than just four ks different tenants.

Speaker 2

而且因为用了封装技术——这正是VLAN和VXLAN最大的区别——底层网络可以是任何类型。

And then because you are using encapsulation, which is like the big difference between VLAN and VXLAN, your underlay network can be anything.

Speaker 2

底层网络也可以是路由型的L3网络架构,VLAN也能做到这一点。

It can be a routed L3 network fabric, which you can do with VLAN.

Speaker 2

使用VXLAN,你能获得多得多的灵活性。

You get many more possibilities using VXLAN.

Speaker 2

它让你能构建虚拟的L2网络,而底层用什么网络都行,只要服务器之间能互通就行。

It lets you build those virtual L2 networks, but underneath you can have any network as long as you have connectivity between your servers.

Speaker 1

对搭建这些网络的人来说,最主要的好处是什么?

What's the main benefit for the people that are setting these up?

Speaker 1

为什么要把这些独立的VLAN或者这些分开的模块整合在一起呢?

Why would you want all these separate VLANs or these separate pieces together?

Speaker 2

这样能实现隔离。

You get isolation.

Speaker 2

每个租户都能拥有自己独立的二层网络。

Each tenant gets basically its own L2 network.

Speaker 2

这些二层网络可以完全独立运行。

Those L2 networks can work completely independently.

Speaker 2

我觉得在虚拟化环境中,一个重要优势是能够迁移虚拟工作负载。

And I think a big part of it is in the virtual world is the ability to migrate your virtual workloads.

Speaker 2

当你在同一个VXLAN内把虚拟机从一台物理服务器迁移到另一台时,完全不用操心底层的物理网络。

When you move a VM from one physical server to another physical server within the same VXLAN, you don't have to worry about the underlay physical network at all.

Speaker 2

你根本不需要去修改网络交换机、物理设备、路由器这些的配置。

You actually don't have to go in and change the configuration for your network switches, your physical devices or your routers or whatever.

Speaker 2

这些设备都不用动。

You don't have to touch them.

Speaker 2

你只需要更新源服务器和目标服务器上的虚拟交换机即可。

You just need to update the virtual switch at the source physical server and at the destination physical server.

Speaker 2

basically 就是告诉这两个虚拟交换机 VM 要迁移到哪儿,其他都不用改。

Basically, have to tell those virtual switches where the VM is going, and that's all that needs to change.

Speaker 2

物理网络根本察觉不到这次迁移。

The physical network is not aware of the migration at all.

Speaker 2

多亏了软件定义网络(SDN),它提供了对交换机——尤其是虚拟交换机——的开放 API,做这种配置变得特别简单,根本不用等什么网络收敛之类的操作。

And thanks to SDN, Software Defined Networking, which gives you open APIs to switches, in particular virtual switches, doing this programming becomes very easy and you don't have to wait for some convergence event or anything.

Speaker 2

虚拟工作负载的迁移,这点优势非常明显。

Migration of virtual workloads is a very big advantage there.

Speaker 0

我们可以把这个跟 Kubernetes 的网络机制联系起来看。

We can relate this back to how Kubernetes does networking.

Speaker 0

运行节点的机器,不管是通过网线连到物理设备上,还是云上的实例,通常都只有一个 IP 地址。

The machines that nodes are run on tend to have a single IP address, whether they be plugged in by a cable on the physical hardware or whether they be a cloud instance.

Speaker 0

Kubernetes 很早就提出了一个概念:每个 Pod 都有自己的 IP 地址。

Kubernetes very early on introduced the idea that each pod has its own IP address.

Speaker 0

所以我们需要一种方法,让一台机器拥有多个 IP 地址。

So now we need a way of getting multiple IP addresses to a machine.

Speaker 0

早期都是通过覆盖网络来实现的。

In the early days that would be achieved by way of an overlay network.

Speaker 0

早期的覆盖网络,像 Flannel 和 WeaveNet,是同一个思路的不同实现,还是各有不同?

Are the early overlay networks things like Flannel and WeaveNet are they implementations of the same idea or were they somehow different?

Speaker 2

Flannel 使用的是 VXLAN 覆盖网络,基本遵循了我刚才说的那些原则。

Flannel uses a VXLAN overlay network which actually follows the same principles I've described pretty much.

Speaker 2

我参与的 Project Antrea 项目,也构建了一个覆盖网络。

The project I'm working on, Project Antrea, also builds an overlay network.

Speaker 2

你可以选择不同的覆盖技术,我们也支持不需要覆盖、不需要封装的模式。

You can choose between different overlay technologies and we support modes which do not require overlays and do not require encapsulation.

Speaker 2

但在我看来,根据 Kubernetes 的网络模型,为 Pod 构建覆盖网络,仍然是最简单、最通用的方案,适用于各种完全不同的 Kubernetes 集群。

But in my mind, based on how the Kubernetes network model is, building an overlay for pods remain one of the easiest solutions and most portable solutions for completely different types of Kubernetes clusters.

Speaker 0

你提到的另一种方案,是路由网络,也就是不使用覆盖网络。

The alternative, as you mentioned, was a routed network where you didn't have an overlay.

Speaker 0

Calico 项目早期就具备这个功能,他们用的是 BGP,基本上把每个节点当成交换机来处理。

And that was one of the early features of the Calico project, where I believe they used BGP and basically treated each node like it was a physical switch I guess.

Speaker 0

当时宣传说这样性能更好。

That was touted as being better performance.

Speaker 0

现在这还是必须的吗?还是说-overlay 网络的性能已经和路由网络差不多了?

Is that still a requirement or are overlay networks now as performant as routed networks?

Speaker 2

如果不使用 overlay 网络,也不用封装,就能去掉一些开销,因为封装会带来额外的处理负担。

When you don't use an overlay network and you don't use encapsulation, you eliminate some of the overhead because encapsulation requires additional errors, maybe a bit of additional processing.

Speaker 2

实际上,你的有效 MTU(最大传输单元)会变小。

You actually reduce your effective MTU, maximum transmission unit.

Speaker 2

每个数据包能传输的数据量就少了一点。

The amount of data you can send in each packet becomes a bit smaller.

Speaker 2

但如果 MTU 很大,比如 9K,那这点影响就微不足道了。

It's not going to matter for large MTUs, nine ks MTU, of course, because then the offset becomes small.

Speaker 1

你刚才提到,你现在正在做 Project Antrea。

As you mentioned, you're working on Project Antrea right now.

Speaker 1

那是什么?

What is that?

Speaker 2

我们一直在聊 Kubernetes 网络和现有的项目,但还没真正说清楚 Kubernetes 网络到底指的是什么。

We've been talking about Kubernetes networking and existing projects, but we haven't really defined what Kubernetes networking is about.

Speaker 2

如果你去看 Kubernetes 的官方文档,它的网络模型其实非常简单。

If you look at the Kubernetes documentation, the Kubernetes network model, it's very simple.

Speaker 2

文档里说,同一个节点上的 Pod 要能跟其他所有节点上的 Pod 直接通信,不能做任何网络地址转换。

What it says is that pods on the node should be able to communicate with pods on all the other nodes without any network address translation.

Speaker 2

当目标 Pod 收到源 Pod 的流量时,它能直接通过源 Pod 的 IP 地址识别出对方,而且这个 IP 没有被修改过。

When the destination pod receives traffic from a source pod, it can identify that source pod using the source pod IP which has not been rewritten.

Speaker 2

第二点是,节点上的进程,尤其是每个节点上的 Kubelet 组件,必须能跟本节点上的所有 Pod 通信。

And the second thing is that processes on the node and especially the KubeLET Kubernetes agent on each node should be able to communicate with all the pods on that node.

Speaker 2

Project Antrea 是一个网络插件,它的任务就是实现并保障这个 Kubernetes 网络模型。

Project Antrea is a network plugin, so it's going to enforce and implement this Kubernetes network model.

Speaker 2

不过如果你看看 CNI 生态系统里的网络插件,会发现像 Calico、Cilium 这些主流项目,都不只是满足这些基本要求,它们还提供了更多额外的功能。

But if you look at the CNI ecosystem, the network plugin ecosystem, you can see that all the popular projects like Calico, Cilium and so on, they go beyond just those very simple requirements and they provide you with additional features.

Speaker 2

Antrea 就是这样一个 Kubernetes 网络插件。

Project Antrea is one such Kubernetes network plug in.

Speaker 2

它不仅实现 Pod 之间的网络互通,还提供了一些在运行集群和部署工作负载时非常实用的额外功能。

It provides networking across pods and it provides some extra features which are useful when running clusters and deploying workloads on clusters.

Speaker 1

这个名字挺有意思的。

It has a very interesting name.

Speaker 1

是希腊语的吗?

Is it Greek?

Speaker 1

这名字是从哪儿来的?

Where did it come from?

Speaker 2

你肯定听过计算机领域那句老话:世上最难的事就两件,一是缓存失效,二是给东西起名字。

You know that quote in like computer science which says that there are only two hard things in computer science and it's cache invalidation and naming things.

Speaker 2

我觉得,Antrea 这个名字确实是整个项目里最难搞定的部分。

I think it's fair to say that the naming in Antrea was one of the hardest part of the project.

Speaker 2

我们当时想延续 Kubernetes 的航海主题,对吧?

We wanted to stay in the Kubernetes naval theme, right?

Speaker 2

你有 Kubernetes,有 Helm,有 Prow,这些东西都挺常见的。

You have Kubernetes, you have Helm, you have Prow, all those things.

Speaker 2

但如果你看看 Kubernetes 网络领域现有的项目,会发现另一个主题,就是跟网络和网状结构有关。

But at the same time, if you look at existing projects in the Kubernetes networking space, you can see that there is another theme which is around nets and around fabrics.

Speaker 2

比如服务网格、Flannel、Weave,等等。

So you have service mesh, you have flannel, you have Weave and so on.

Speaker 2

在开源这个项目之前,我们想了很多可能的名字,都是试图把这两个方向结合起来。

We came up with a lot of potential candidates before we open sourced the project, which were kind of at the intersection of those two fields.

Speaker 2

然后我们把这些名字发给 VMware 的法务团队,他们因为知识产权的问题,否掉了其中 95 个。

And then we sent them to the VMware legal team, and they cut 95 of them for intellectual property rights concerns or something like this.

Speaker 2

那些被否掉的名字,他们现在一个都记不起来了。

They don't remember any of the other candidates.

Speaker 2

最后剩下来的,几乎就只有 Antrea 这一个,其实也没啥别的选择了。

But at the end, pretty much Antrea was the only one left, so not much of a choice left there.

Speaker 2

这个名字来自一种最古老的渔网,是在芬兰一个叫 Antrea 的小镇发现的。

It's named after one of the oldest fishing nets that was discovered, and it was discovered in a Finnish town called Antrea.

Speaker 2

这个名字就是来自那个小镇,项目也是以那张网命名的。

That is named after the town and the project is named after that net.

Speaker 2

我觉得那个小镇现在应该已经不存在了。

I think the town doesn't exist anymore.

Speaker 2

现在那儿属于俄罗斯,名字也改了。

I think it's a Russian town now with a different name.

Speaker 2

名字的由来就是这么回事。

That's the origin of the name.

Speaker 2

一开始我们有个内部名称,是个缩写。

Originally we had an internal name which was an acronym.

Speaker 2

当时叫OKN,意思是Open Container Networking或者Open Kubernetes Networking。

It was OKN for open container networking or open Kubernetes networking.

Speaker 2

VMware的法务团队不太喜欢用缩写,所以……

The VMware legal team doesn't like acronyms much, so

Speaker 0

我觉得K可以同时代表Container或者Kubernetes,看当时怎么理解,还挺巧妙的。

I like how the k could stand for both container or Kubernetes depending on this presently.

Speaker 2

是的。

Yes.

Speaker 2

我们也觉得这样挺好。

We like that.

Speaker 1

我正想说,可能还有另一个项目也用了类似的命名方式。

I was about to say, I think there's another project that may also followed that same naming convention.

Speaker 2

不止一个项目呢。

More than one project.

Speaker 0

Antrea 是一个容器网络接口,也就是 CNI 插件。

Antrea is a container network interface or CNI plugin.

Speaker 0

在 Kubernetes 的语境里,CNI 是一个相对较新的网络配置机制。

CNI is a relatively recent in Kubernetes terms system for configuring networking.

Speaker 0

CNI 是怎么工作的?为什么它最适合解决你的问题?

How does CNI work and why is it the right thing to implement to solve your problem?

Speaker 2

对于不太了解 CNI 的人,我们从头到尾讲一遍。

For people who are not familiar with CNI, want a top to bottom approach.

Speaker 2

创建一个 Pod 时会发生什么?

What happens when you create a pod?

Speaker 2

用户会通过向 Kubernetes API 提供配置信息,来请求调度一个 Pod。

So the user is going to request for a pod to be scheduled by providing specification to the Kubernetes API.

Speaker 2

可以直接这么做。

It can be directly.

Speaker 2

也可以通过 Deployment 之类的工具来实现。

It can be through a deployment or something like this.

Speaker 2

然后 Kubernetes 的控制平面会把这个 Pod 调度到集群中的某个节点上。

And then the Kubernetes control plane is going to schedule that pod on one of the Kubernetes nodes in your cluster.

Speaker 2

调度完成后,它会通知该节点上运行的 Kubelet 组件:好了,你得在这台工作节点上启动这个 Pod,也就是里面的容器。

Once it has done that, it's going to let the KubeLET agent running on the node know about this pod and say, Okay, you need to run that pod, that container essentially on your worker node.

Speaker 2

Kubelet 收到这个指令后,就会和容器运行时进行交互。

And once KubeLET gets this information, it's going to interact with the container runtime.

Speaker 2

这个交互是通过一个叫 CRI(容器运行时接口)的标准接口完成的。

That's done through a standard interface called CRI, container runtime interface.

Speaker 2

然后,容器运行时需要通过另一个标准接口与 Kubernetes 网络插件交互,这个接口叫 CNI,也就是容器网络接口。

And then the container runtime needs to interact with the Kubernetes network plugin through another standard interface which is called CNI or container network interface.

Speaker 2

CNI 其实是独立于 Kubernetes 存在的。

And CNI is something that exists outside of Kubernetes really.

Speaker 2

它是 CNCF 的项目,定义了规范,维护着一些实现了这个接口的标准插件。

It's a CNCF project, defines the MPI and maintains it and maintains some standard plugins which implement this interface.

Speaker 2

这是 Kubernetes 网络功能的关键部分。

It's a key part of Kubernetes networking.

Speaker 2

因为 Kubelet 正是通过这种方式通知网络插件如何为特定的 Pod 配置网络,所以所有的 Kubernetes 网络插件都必须实现这个接口。

And because that's how KubeLET eventually interacts with the Kubernetes network plugin to inform it on how to provision networking for a specific pod, all the Kubernetes network plugins have to implement this interface.

Speaker 2

这个接口其实非常简单。

It's a very simple interface.

Speaker 2

你只需要实现三个方法就行了。

You actually have three different methods.

Speaker 2

CNI add,也就是当创建了一个 Pod,就为它配置网络。

CNI add, which is I've created this pod, configures the networking for that pod.

Speaker 2

然后是 CNI 删除,意思是我要删除这个容器了,你来做清理工作。

And then you have CNI delete, which is I'm deleting this pod, do your cleanup.

Speaker 2

还有 CNI 检查,可以定期调用,确认一切正常。

And then you have CNI check, which can be called periodically to make sure that everything is good.

Speaker 2

如果你看容器创建时发生了什么,在 Linux 上通常是创建一个 Veth 对,就像一根虚拟的网线。

If you look at what happens when the pod is created, typically on Linux what that would involve is you create a VSPare, which is like a virtual Ethernet cable.

Speaker 2

从一端进去的数据,会从另一端出来。

Everything that goes through one end exits through the other end.

Speaker 2

你会创建这个 Veth 对——它由两个互相连接的接口组成,然后把一端放进容器的网络命名空间,另一端连到某个虚拟交换机上。

You're going to create that VSP, which is two interfaces which are pipelined together, and then you're going to put one end of this in the pod's network namespace and attach the other end of it to some kind of virtual switch.

Speaker 2

这就是为容器配置网络的方式。

And that's how you provision networking for a pod.

Speaker 2

接着给它分配 IP 地址,设置路由,等等。

Then you assign an IP address to it, configure routes, and so on.

Speaker 2

剩下的就看你用的网络插件具体怎么实现了。

The rest really depends on your network plug in implementation.

Speaker 0

所以现在你需要把这根虚拟网线的另一端连到交换机上。

So now you need to connect the other end of that virtual Ethernet cable to a switch.

Speaker 0

你之前提到过一些技术,特别是 Open vSwitch。

You've mentioned before some of the technologies here, and in particular Open vSwitch.

Speaker 0

为什么 Antrea 选了 Open vSwitch 这个技术呢?

Why is that the technology that you chose for Antrea?

Speaker 2

不同的插件实现方式不一样。

Plug ins work differently.

Speaker 2

对吧?

Right?

Speaker 2

比如 Calico 就不用网桥,因为它是个基于路由的网络插件。

Calico, for example, doesn't use like a bridge because it's a routed network plug in.

Speaker 2

在 Antrea 里,我们确实用了网桥,而且通过 Open vSwitch 这个虚拟交换机来构建 Pod 之间的整体网络。

In Antrea, we do use a bridge, and we use Open vSwitch, a virtual switch, to build that overall network between pods.

Speaker 2

我们选择 Open vSwitch 有好几个原因。

And there are multiple reasons why we chose to go with Open vSwitch.

Speaker 2

首先,最明显的一点,我们不妨直说,Open vSwitch 得到了 VMware 的大力推动。

One, the obvious one, maybe we should get it out there, that Open vSwitch is very actively promoted by VMware.

Speaker 2

它最初由 Nicira 设计,后来被 VMware 收购了。

It was designed by Nicira and then VMware acquired Nicira.

Speaker 2

所以很多 Open vSwitch 的贡献者和维护者本身就是 VMware 的员工,用在 Antrea 项目上,我们可以直接依赖他们的专业能力。

So a lot of the Open vSwitch contributors and maintainers or also VMware employees, we can rely on that expertise when we use Open vSwitch for project Antrea.

Speaker 2

当然还有其他很多原因,对吧?

There are many other reasons, right?

Speaker 2

它是 Linux 基金会旗下的项目。

So it's a Linux Foundation project.

Speaker 2

拥有一个非常活跃的开发社区,而且不只限于 VMware 内部。

It has a very strong development community, including outside of VMware.

Speaker 2

比如红帽公司就有不少人专门在做 Open vSwitch 的开发。

You have a lot of people at Red Hat, for example, working on Open vSwitch.

Speaker 2

它几乎内置在所有主流 Linux 发行版里,包括为云和容器优化的系统。

It's available out of the box in pretty much any Linux distribution, and that's going to include cloud optimized container distributions.

Speaker 2

AWS 有一个叫 Bottle Rocket 的系统。

AWS has one called Bottle Rocket.

Speaker 2

我觉得 Google 那边叫 Google Container OS。

I think in Google it's Google Container OS.

Speaker 2

我没专门查过那个,但一般来说,Open vSwitch 的数据平面在 Linux 上是开箱即用的。

I didn't check that one specifically, but typically Open vSwitch Data Pass is going to be available out of the box in Linux.

Speaker 2

所以它在可移植性方面非常关键。

So it's very important for portability.

Speaker 2

还有其他原因,对我们来说特别重要的一点是,Open vSwitch 同时支持 Linux 和 Windows。

Other reasons, and this one's very important for us, is that Open vSwitch works both across Linux and Windows.

Speaker 2

它的可移植性很强。

It's very portable.

Speaker 2

对我们来说这很重要,因为 Windows 上的 Kubernetes 还是落后一些,不过最近几个版本已经慢慢跟上来了。

For us, it's very important because Kubernetes on Windows is still lagging behind, but it's been picking up some momentum in the latest Kubernetes releases.

Speaker 2

我们特别需要一种数据平面技术,能让我们在 Linux 和 Windows 工作节点上都支持,而不用把两套实现完全重复做一遍。

We really wanted a data pass technology that enables us to support both Linux worker nodes and Windows worker nodes without completely duplicating efforts across both implementations.

Speaker 2

如果你看看其他网络插件,比如用 eBPF 做数据层实现,那 eBPF 在 Windows 上根本用不了。

If you look at other network plug ins, maybe using things like eBPF for their database implementation, well eBPF is not something you can use on Windows.

Speaker 2

这是 Linux 专属的技术。

It's a Linux specific technology.

Speaker 2

对我们来说,能有一套在 Linux 和 Windows 上几乎完全一致的可移植数据包处理流程,至关重要。

Being able to have that portability, defined packet processing pipeline for Kubernetes that we can use pretty much identically on both Linux and Windows was very important for us.

Speaker 2

最后,还有一个很有趣的地方,就是很多硬件厂商都在积极支持 Open vSwitch。

I think finally, very interesting aspect is the fact that you have a lot of hardware vendors which support Open vSwitch actively.

Speaker 2

我的意思是,有些厂商生产的物理网卡,本身就内置了对 Open vSwitch 硬件卸载的支持。

By support, I mean that vendors which provide physical network interface cards with support for Open vSwitch offload.

Speaker 2

所以在一些对吞吐量和延迟要求很高的裸机场景里,你可以直接把数据包处理任务卸载到网卡上,利用这种硬件加速。

So for some bare metal use cases that require a lot of throughput and low latency between your workloads, you can leverage that hardware offload support and actually offload your packet processing to the network interface cards.

Speaker 2

而这一切,正是 Open vSwitch 带来的便利。

And that's something that's really facilitated by Open vSwitch.

Speaker 1

网络连接后,Pod 是怎么获取 IP 地址的?

When the network is connected, how does the pod get its IP address?

Speaker 1

是通过DHCP分配的吗?

Is it DHCP?

Speaker 1

还是别的机制?

Something else?

Speaker 2

Kubernetes网络插件里有个叫IP地址管理(IPAM)的概念,每个插件的实现都不一样。

There is that whole notion of IPAM, IP address management around Kubernetes network plugins, and every plugin is going to be different.

Speaker 2

在Antrea里,我们现在依赖Kubernetes控制平面里的一个组件,叫节点IPAM控制器。

What we do in Antrea is right now we rely on a part of the Kubernetes control plane called the node IPAM controller.

Speaker 2

当你用KubeAdm创建Kubernetes集群时,会指定一个Pod的CIDR地址段。

So when you create your Kubernetes cluster, for example with KubeLmin, you provide what we call a pod CIDR, which is a range of IP addresses.

Speaker 2

比如10.0.0.0/16。

For example, 10.0sixteen.

Speaker 2

这样就能得到六万多个IP地址。

Then you get 65,000 IP addresses there.

Speaker 2

节点IPAM控制器的作用是,每当有新节点加入集群,它就会从这个大地址段里划出一个小子网,分配给这个节点,告诉它:这个节点上创建的Pod,可以从这个子网里选IP地址。

And what the node IPAM controller is going to do is every time a new node joins a cluster, it's going to carve out a smaller subnet, a smaller range of IP addresses out of that bigger range, and it's going to allocate it to that node and say, Okay, for the pods created on that specific node, you can pick an IP address from that range.

展开剩余字幕(还有 127 条)
Speaker 2

Antrea 会监听节点 IPAM 控制器,它的运作方式是:Kubernetes API 中的节点配置会更新为这个 IP 地址段。

Antrea is going to listen to the node IPAM controller and the way it works is the node specification in the Kubernetes API is going to be updated with that range of address.

Speaker 2

所以我们监听这个变化,当新 Pod 被创建、Kubelet 调用 CNI 接口时,我们就从这个地址段里分配一个 IP 给它。

So we listen to that, and then when a new pod is created and KubeLET invokes a CNI interface, we're going to assign one IP address from that range.

Speaker 2

整个过程都在本地完成。

It all happens locally.

Speaker 2

目前这一切都依赖于 Kubernetes 的控制平面。

It's all reliant on the Kubernetes control plane right now.

Speaker 2

未来我们可能会探索其他几种 IPAM 的实现方式。

There are different ways of doing IPAMs that we will probably explore in the future.

Speaker 0

如果你用的是 GKE 这类托管服务,它本身已经对接了底层网络,那 Antrea 对你有用吗?还是说它只适合从零搭建、自己插网卡、用 KubeLmin 的人?

If I'm running on a managed service like GKE that interfaces with an underlying network, is Antrea something for me or is it just for people who are building from scratch and plugging in network cards and using KubeLAN?

Speaker 2

这个问题问得真好。

I love this question.

Speaker 2

说实话,这个问题挺难回答的,因为每个云服务商、每种托管 Kubernetes 服务都不太一样。

I mean, pretty complex to answer because every cloud provider and every Kubernetes managed service is going to be different.

Speaker 2

我们希望Antrea能在任何支持Kubernetes的地方运行,无论是裸金属集群、本地集群,还是你自己在EC2或GCP上搭建的集群,甚至像GaAs和Egas这样的托管服务。

We would love for Antrea to be supported on anywhere Kubernetes is supported, right, from bare metal cluster to on premise clusters to clusters that you build yourself on EC2 or GCP to manage services like GaAs and Egas.

Speaker 2

如果你查看我们的开源仓库,会发现我们提供了文档和社区维护的YAML清单,帮你在这类云托管服务上部署Antrea。

If you look at the entry repository, you can see that we provide documentation and community CML manifest for you to run Antrea on those cloud managed services.

Speaker 2

但问题是,我们目前并不原生支持这些平台。

The problem is we don't support them natively.

Speaker 2

所谓原生支持,比如你在GKE上创建集群时,理想情况是有个下拉菜单,直接选Antrea,点一下创建,一切就自动配置好了。

So by natively, I mean when you create a cluster on GKE, for example, ideally we would love for our users to have a drop down menu and they just select Antrea and they hit create cluster and the magic happens.

Speaker 2

Antrea会自动部署,网络配置也完全正确。

Antrea is deployed and the network configuration is correct.

Speaker 2

但现实并不是这样。

That's not how it works.

Speaker 2

要实现这一点,你的项目得先积累足够的影响力,还得和云服务商合作,推动他们加入支持。

For this to happen, your project has to gain some momentum and you have to work with the cloud providers to enable that support.

Speaker 2

当然,我们都希望这一天能到来,但目前还做不到。

Obviously that's something we would love to see happen, but right now that's not how it works.

Speaker 2

现在我们要求用户先创建集群,然后通常得运行一个脚本来移除现有的网络方案,之后才能用我们提供的特定 YAML 文件来部署 Antrea。

Right now we ask our users to first create a cluster, then usually they have to run some kind of script to get rid of the existing networking solution, and then they can deploy Antrea using a specific YAML manifest that we provide.

Speaker 2

每个云服务商的情况都不一样,就像我说的。

And every cloud provider, like I said, is going to be different.

Speaker 2

比如在 GKE 上,我们其实能做得不错,因为你可以用 KubeNet 来创建集群,这算是默认的网络插件。

For example, in GKE, we can actually do a pretty good job because you can deploy a cluster with KubeNet, which in a way is a default network plugin.

Speaker 2

光靠 KubeNet 本身,其实做不了多少事。

Just by itself, KubeNet doesn't do much.

Speaker 2

它得跟云服务商合作,在底层网络里配置路由,这样云平台才知道怎么在不同 Pod 之间转发数据包。

As you say, it relies on collaborating with the cloud provider to program routes in the physical network infrastructure so that the cloud providers knows how to forward packets between pods.

Speaker 2

所以在 GKE 上,我们可以完全替换掉 KubeNet,自己搭建一个覆盖网络来实现 Kubernetes 的网络功能。

So in GK, we are able to completely replace KubeLnet and build our own overlay network to provide Kubernetes networking.

Speaker 2

至于 EKS 和 AKS 这些其他云服务,我们就得用所谓的 CNI 链式模式,跟云厂商现有的网络方案配合使用。

For other cloud services like EKS and AKS, we have to work in what we call CNI chaining mode where we collaborate with the existing solution from the cloud provider.

Speaker 2

在 EKS 上,就是用 AWS 的 VPC CNI。

For EKS, it's AWS VPC CNI.

Speaker 2

所以他们负责分配 IP 地址。

So basically they do the IP address allocation.

Speaker 2

他们会为容器创建虚拟网卡,但之后 Antrea 会介入,把那些虚拟网卡拿过来,接入到 Open vSwitch 里。

They create the VEs for the pod containers, but then Antrea is going be invoked after this and we're going to steal the VEs away and plug it into Open vSwitch.

Speaker 2

我们这么做,是为了能正确执行 Kubernetes 的网络策略,这也是 Antrea 作为网络插件的核心功能之一。

And we do that so that we can properly enforce Kubernetes network policies, which is a big part of what Entrea is providing as a network plugin.

Speaker 1

所以你在说的是,可能想用其他方案来替换默认的 CNI。

So you're talking about ways that you might want to replace the default CNI that might be available with things.

Speaker 1

但 Antrea 不仅仅关乎网络。

Entrea isn't just about networking though.

Speaker 1

它还涉及安全和策略管理。

There's also security and policy aspects to it.

Speaker 1

从安全和策略的角度来看,Antrea 到底做了些什么?

What does Entrea do from those aspects?

Speaker 2

最基本的一点是,我们实现了 Kubernetes 的网络策略 API。

The very basic thing here is that we do implement the Kubernetes network policy API.

Speaker 2

并不是所有插件都这么做。

So that's not something that all plugins do.

Speaker 2

我们之前聊过云服务商的 CNI。

We talked about cloud provider CNIs.

Speaker 2

那些通常不执行 Kubernetes 网络策略,所以也没实现这个 API。

Those typically don't enforce Kubernetes network policy, so they don't implement the Kubernetes network policy API.

Speaker 2

比如 Flannel 这种插件,也没实现 Kubernetes 网络策略 API。

If you look at a plugin like Flannel, for example, also does not implement Kubernetes network policy API.

Speaker 2

但如果你看看最主流的那些插件,比如 Calico 和 Cilium,它们都实现了这个 API,而且还会进一步扩展。Antrea 也是这样,我们在 Kubernetes 网络策略 API 基础上做了额外功能,因为一旦在企业环境中使用,你会发现原生 API 有局限,得扩展才能覆盖所有场景。

But if you look at the most popular plugins, I want to say Calico and Cilium, they all implement this API and they actually go beyond that and we do the same thing in Antrea where we provide some extensions to the Kubernetes network API, because what you realize once your plugin is used in the context of an enterprise is that the Kubernetes network policy API has some limitations and you need to extend it to satisfy all the use cases.

Speaker 2

这些插件确实都这么做了。

So those plugins do that.

Speaker 2

有的完全开源,有的是商业闭源,也有的介于两者之间。

Sometimes it's fully open source, sometimes it's proprietary, sometimes it's somewhere in the middle.

Speaker 1

现在 Gatekeeper 和 OPA 正变得越来越流行。

Now Gatekeeper and OPA are becoming popular.

Speaker 1

能把 OPA 集成到 Antrea 里吗?

Can you plug OPA into Antrea?

Speaker 1

它们是配合使用,还是互相竞争?

Do they work together or do they compete?

Speaker 2

它们其实是两个不同维度的东西。

So they're kind of like orthogonal.

Speaker 2

OPA 是一个准入控制器,用来控制哪些资源可以被创建到集群里。

OPA is an admission controller that lets you restrict what kind of resources can be allowed to be created in your cluster.

Speaker 2

特别是 OPA,它替代了即将被弃用的 Pod 安全策略这个 API。

OPA in particular replaces pod security policies which is an API being deprecated.

Speaker 2

这个 API 能让你做这样的限制,比如不允许用户创建特权容器,或者挂载节点底层目录的容器。

And that API lets you do things like, okay, I do not want users to be able to create privileged pods or pods which are going be able to mount directories from the underlying Kubernetes node.

Speaker 2

OPA 的核心就是把这种控制能力通用化,让你能限制集群里创建哪些资源。

That's what OPI is about, generalizing that ability to prevent which resources are going to be created in your cluster.

Speaker 2

它不仅适用于 Pod,也适用于任何资源,包括网络策略和自定义资源定义。

It applies to pods, it applies to any resource, and it can apply to network policies as well, and it can apply to custom resource definitions.

Speaker 2

所以通过 OPA,你可以定义策略,控制集群中允许创建哪些 Kubernetes 网络策略。

So using OPI, you can define policies to dictate what kind of Kubernetes network policies you're going to be allowed to create in your cluster.

Speaker 2

Kubernetes 网络策略主要是决定哪些 Pod 能够互相通信。

Kubernetes network policies are really about deciding which pods can talk to which other pods.

Speaker 2

之前我提到过 Kubernetes 的网络模型,说过 Pod 之间应该可以无需地址转换直接通信。

Earlier on, I talked about the Kubernetes Network model, and I said that pods should be able to talk to every other pod without address translation.

Speaker 2

但一旦你定义了 Kubernetes 网络策略,并且你的 CNI 插件实现了这些策略,这个前提就不成立了。

But as soon as you define Kubernetes Network policies and your CNI plugin implements those policies, this is no longer valid.

Speaker 2

当你给一个 Pod 应用网络策略后,这个 Pod 就会被视为‘隔离的’,只能与那些你明确授权的 Pod 通信。

When I apply a network policy to a pod, that pods become what we call isolated and it can only talk to pods for which you explicitly define network policy rules.

Speaker 2

所以 OPA 和网络策略是两个独立的机制,但它们可以相互配合,因为 OPA 能让你控制集群中网络策略的准入规则。

So the two OPA and network policies are like orthogonal, but they can interact with each other because OPA can let you define policies for network policy admission in the cluster.

Speaker 1

Antrea 的另一个功能是支持加密,特别是节点之间的加密通信。

One of the other features of Antrea is that it does encryption, in particular node to node encryption.

Speaker 1

Antrea 是一个服务网格吗?

Is Antrea a service mesh?

Speaker 2

不是。

No.

Speaker 2

Antrea 确实提供加密功能,但这是在服务网格的另一层实现的。

So Antrea does provide an encryption, but that would be at a different layers in service mesh.

Speaker 2

总的来说,CNI 插件和你用的任何服务网格方案,比如 Istio,都是在不同层级运作的,彼此互补。

And overall, the CNI plugin and whichever service mesh solution you use like Istio, they tend to operate on different layers and they are complementary.

Speaker 2

CNI 插件工作在二层和三层。

The CNI plugin operates at layer two, layer three.

Speaker 2

它负责实现 Pod 之间的网络连通。

It provides connectivity between pods.

Speaker 2

而服务网格关注的是你的应用负载——不是单纯的 Pod 层面——如何互相通信。

Whereas service mesh is more about how your workloads, not really at the pod level, can communicate with each other.

Speaker 2

所以在 Antrea 中,我们提供了节点到节点的加密。

And so in Antrea, we provide node to node encryption.

Speaker 2

在覆盖网络中,你可以使用 IPsec,这是一种用于 IP 的加密和认证协议,能加密从一个节点发出、直到抵达另一个节点的所有流量。

As part of the overlay network, you can use IPSec, which is an encryption and authentication protocol for IP, which is going to encrypt the traffic leaving one node until it gets to another node.

Speaker 2

但比如,同一节点上不同容器之间的流量是不会被加密的。

But for example, traffic between pods on the same node is not going to be encrypted.

Speaker 2

服务网格工作在另一层,也就是四层之上,它支持像双向TLS这样的功能。

Service mesh operates at a different layer, right, above layer four, and it does support things like MTLS.

Speaker 2

这是一种更普遍的加密方式,所有你希望加密的流量都能得到保护。

It's going to be a much more ubiquitous form of encryption where all the traffic that you want can be encrypted.

Speaker 2

不同层级的加密方案,比如IPSec或WireGuard这类技术,通常比用MTLS做端到端加密能提供更高的吞吐量。

So different layers, usually IPSec or other technologies like WireGuard can provide higher throughput than doing end to end encryption with MTLS.

Speaker 2

但这其实并不是真正的端到端加密,对吧?

But it's not really end to end encryption, right?

Speaker 2

它只是在底层网络不安全,或者集群跨多个站点时,用来保护节点间通信的。

It's just traffic that goes across nodes if your underlay network is not considered secure, for example, or if your cluster is split across multiple sites.

Speaker 1

这么说合适吗?你讲的更多属于基础设施层,而服务网格则更偏向应用层?

Would it fair to say that what you're talking about is more at the infrastructure layer versus the service mesh is more at the application layer?

Speaker 2

对。

Yeah.

Speaker 2

这么说应该没错。

Think it's fair to say that.

Speaker 0

Antrea 项目社区是如何与上游 Kubernetes 社区互动的?

How does the project Antrea community interact with the upstream Kubernetes community?

Speaker 0

仅仅是通过 CNI 实现,还是有更多合作?

Is it just through the CNI implementation or is there more there?

Speaker 2

我们有不少 Antrea 的贡献者,他们活跃在上游社区,尤其是在 Kubernetes SIG Network 里。

We have quite a few contributors, Antrea contributors, which are very active upstream and especially in the Kubernetes SIG network.

Speaker 2

目前还有一个持续进行的项目,就是改进 Kubernetes 的网络策略 API,我们之前提到过。

There is an ongoing effort to improve the Kubernetes network policy API, which we mentioned previously.

Speaker 2

我们的一位核心贡献者叫 Abhishek,深度参与了这项工作。

And one of our core contributors, his name is Abhishek, is very involved in this.

Speaker 2

这个项目背后的思路是,正如我所说,主流的网络插件通常都会用 CRD 来扩展 Kubernetes 的网络策略 API。

The idea behind this effort is, as I said, all the popular network plugins tend to provide their own extensions using CRDs for the Kubernetes network policy API.

Speaker 2

这样就能为企业提供更高级的功能。

And you can provide different advanced features for the enterprise.

Speaker 2

你看现在的局面,这些插件其实都提供了一些共同的核心功能。

When you look at the landscape here, you can see that all those plugins tend to provide some subset of features which is common across all of them.

Speaker 2

所以这个上游项目的想法是,也许我们可以统一这些API,或者至少部分统一,让Kubernetes用户用起来更顺手,也能在一定程度上避免被厂商绑定。

So the idea behind this upstream effort is to say, okay, maybe we can unify those APIs or at least part of those APIs so that we can provide a better experience for Kubernetes users and maybe avoid vendor lock in to some extent by standardizing those APIs.

Speaker 2

比如在Antrea里,我们有个叫集群网络策略的功能,可以定义一个适用于整个集群所有Pod的策略,而Kubernetes原生的网络策略是命名空间级别的。

And so in Antrea, for example, we have the notion of cluster network policy, which is the ability to define a network policy which is going to apply to all the pods in the cluster, as opposed to Kubernetes network policies which are namespaced resources.

Speaker 2

也就是说,它们只作用于单个命名空间里的Pod。

So they're only applying to pods within a single namespace.

Speaker 2

如果你想让策略跨所有命名空间生效,就得重复写好几遍同样的规则。

If you want to apply that policy across all namespace, you have to repeat the policy definition.

Speaker 2

你看Calico、Cilium、Antrea,它们都提供了集群网络策略的API。

If you look Calico, Silium, Antrea, they provide that cluster network policy API.

Speaker 2

功能上差不多。

It's kind of similar.

Speaker 2

所以Abhishek参与的这个上游项目,其实还有GKE团队的人一起参与,目标是给Kubernetes网络策略API新增一个专门用于集群网络策略的资源类型。

So the idea of this upstream effort, which Abhishek contributes to, but I think we have some folks from the GKE team as well, is to extend the Kubernetes network policy API with a new API resource for cluster network policies.

Speaker 1

目前,Project Antrea 是你们在基金会之外开发的项目。

Currently, Project Entrea is something that you're working on outside of a foundation.

Speaker 1

你们有计划把它加入 CNCF 吗?

Is it something that you'd like to join the CNCF?

Speaker 2

我们正在认真考虑把 Project Antrea 捐赠给 CNCF 作为沙箱项目。

We are seriously considering donating Project Entrea as CNCF sandbox project.

Speaker 2

这正是我们目前正在推进的事情,虽然还没正式提交,但接下来几个月应该就会有进展。

That's something we're working on currently and we haven't done an official submission yet, but that's something that should be coming in the upcoming months.

Speaker 2

因为你看 CNCF 的生态图谱,目前还没有任何一个 CNI 插件被纳入 CNCF 项目。

Because if you look at the CNCF landscape and the CNCF project, there is no actual CNI plugin which is part of the CNCF.

Speaker 2

我们认为,为了让 CNCF 生态中的各个项目更好地协同,把一个 CNI 插件纳入 CNCF 是很有必要的。

And we think it's important for synergy between those different projects in the CNCF ecosystem to potentially have a CNI plugin as part of the CNCF.

Speaker 2

比如看看 Kubernetes 的网络策略。

Because let's look at Kubernetes network policies, for example.

Speaker 2

虽然它是个标准的 Kubernetes API,但默认的 KubeNet 插件——也就是用来运行上游一致性测试的那个——其实并不支持 Kubernetes 网络策略。

They are a standard Kubernetes API, but the default Kubernetes network plugin, KubeNet, which is used to run upstream conformance tests for example, does not implement Kubernetes network policy APIs.

Speaker 2

那你们怎么通过测试来验证这些 API 呢?

So how would you validate those APIs through testing?

Speaker 2

其实根本做不到。

You really can't.

Speaker 2

但如果你看上游,社区确实维护了一些端到端的网络策略测试用例。

Yet if you look upstream, you have some end to end network policy community tests maintained by the community.

Speaker 2

如果我们能把 Antrea 这样的项目作为 CNCF 的沙箱项目纳入进来,那在代码合并前的 CI 流程里运行这些测试就说得通了,这样就能真正验证这些 API 的正确性。

Maybe if we had a project like Antrea as part of the CNCF as a sandbox project, then it would make sense to run those tests on the project upstream as part of a pre check-in CI, as part of continuous integration, basically validate those tests and validate those APIs.

Speaker 0

除了可能捐赠给 CNCF 沙箱,你觉得 Antrea 未来还会往哪个方向发展?

So aside from potential donation to the CNCF sandbox, where do you see Antrea going next?

Speaker 2

可做的事情很多,但如果非要说一个重点,那我们接下来很可能重点投入电信场景的支持。

There are many things, but if I were to mention one, I would say a big part of our focus going forward may be on supporting telco use cases.

Speaker 2

现在业界都在热议电信运营商从虚拟机转向容器来运行虚拟网络功能。

There is a lot of noise these days about telcos transitioning from virtual machines to containers to run virtual network functions.

Speaker 2

也就是说,他们正从 OpenStack 生态转向 Kubernetes 生态。

So basically transitioning from the OpenStack ecosystem to the Kubernetes ecosystem.

Speaker 2

他们这么做有多方面的原因,其中很重要的一点是想借助 Kubernetes 生态系统的活跃和活力。

And they want to do this for like multiple reasons, but a big part of it is benefiting from the Kubernetes ecosystem, which is very active and very dynamic.

Speaker 2

目前离真正实现还差得远,但我们在 Antrea 的上游经常收到请求,希望支持一些电信场景。

Right now, we're very far from this being a reality, but we get a lot of requests in upstream Antrea to accommodate some of these telco use cases.

Speaker 2

电信行业需要多网络、每个容器支持多个网络接口,还要能做流量引导,也就是在 Kubernetes 集群里运行的各个网络功能之间实现服务链路编排。

Telco needs things like multiple networks, multiple interfaces per pods, the ability to do traffic steering, so service chaining between the different network functions that you can run as containers in a Kubernetes cluster.

Speaker 2

5G 时代,网络切片技术可以创建多个虚拟网络,每个都有独立的服务等级保障。

For five gs, you have the ability to slice a network to create multiple virtual networks with their own SLA guarantees.

Speaker 2

这些其实都是 Kubernetes 的新应用场景。

Basically, those are kind of new use cases for Kubernetes.

Speaker 2

我觉得,电信行业非常需要一个 Kubernetes 网络插件,能提供一套统一且整合的解决方案。

And I think there is definitely a strong interest in having a Kubernetes network plugin provide a unified and integrated solution for telcos.

Speaker 2

这正是我们正在为 Antrea 探索的方向。

So that's something we're looking at with Antrea.

Speaker 1

对于听到这个觉得有意思的人,他们该怎么入手呢?

For people that are listening to this and this sounds interesting to them, how can they get started?

Speaker 2

比如,只需用 kubectl 应用一个 YAML 配置文件就能部署。

That can be deployed by applying a single YAML manifest with KubeCTL, for example.

Speaker 2

我们一直努力让这个过程尽量简单。

That's something we really try to keep simple.

Speaker 2

就像我之前说的,如果你用的是托管的 Kubernetes 服务,我们提供了专门的文档和 YAML 配置文件。

As I mentioned before, for Kubernetes managed services, if you're using Kubernetes managed services, we have dedicated documentation and dedicated YAML manifests.

Speaker 2

但没错,一条命令就能搞定。

But, yeah, single command line.

Speaker 1

感谢你参加我们的对话,Antonin。

Thanks for joining us, Antonin.

Speaker 2

谢谢你们的邀请。

Thanks for having me.

Speaker 2

这次交流很愉快。

It was great.

Speaker 1

你可以在 Twitter 上关注 Antonin Bas,他的账号是 Antonin Bas。

You can find Antonin on Twitter at Antonin Bas.

Speaker 1

你也可以在 GitHub 上找到 Antonin Bas,用户名是 github.com slash Antonin Bas。

That's a n t o n I n b a s or on GitHub at github dot com slash Antonin Bas.

Speaker 0

谢谢收听。

Thanks for listening.

Speaker 0

和往常一样,如果你喜欢这期节目,欢迎帮我们传播一下,推荐给朋友。

As always, if you've enjoyed the show, please help us spread the word and tell a friend.

Speaker 0

如果你有任何反馈,可以在 Twitter 上关注我们 @Kubernetes pod,或者发邮件到 Kubernetespodcast@Google.com 联系我们。

If you have any feedback for us, you can find us on Twitter at Kubernetes pod or reach us by email at Kubernetespodcast@Google.com.

Speaker 1

你还可以访问我们的网站 kubernetespodcast.com,那里有节目文字稿、要点总结,还有订阅链接和参与调查的入口。

You can also check out our website at kubernetespodcast.com, where you can find transcripts and show notes, as well as links to subscribe and the ability to take our survey.

Speaker 1

我们下期再见。

Until next time, take care.

Speaker 0

下周见。

See you next week.

关于 Bayt 播客

Bayt 提供中文+原文双语音频和字幕,帮助你打破语言障碍,轻松听懂全球优质播客。

继续浏览更多播客