爱德华venene.

测试你丰富的Kubernetes知识的面试可能会令人生畏。尽管Kubernetes还相当年轻,但它已经在过去几年中扩展到了一个庞大的生态系统。

了解你应该学会能够回答面试官的问题可能特别困难。面试官问“什么是kubernetes?”的时间或者“Kubernetes如何与Docker Swarm进行比较?”不幸的是很久了。关于Kubernetes Internals的详细知识现在是常态。

在本文中,我涵盖了一些更难,深度潜水的Kubernetes采访,公司可能会问您。学习以下问题的答案将有很长的路要帮助您降落您的下一个角色。

学习devops:完整的kubernetes课程

最后更新5月2021

畅销书
  • 146讲座
  • 所有级别
4.4 (12,694)

Kubernetes将运行和管理您的集装箱应用程序。了解如何构建,部署,使用和维护Kubernetes |由爱德华·Viaene

探索课程

1.当您输入“kubectl get pods”时会发生什么?

不要低估这个问题。“它列出了kubernetes集群上的豆荚”这句简单的陈述远远不是采访者想听到的答案。让我们从高层次上回顾一下当你输入这个命令时发生的步骤:

第1步:配置

运行kubectl时,它将首先查看Kubernetes配置文件。配置的默认路径为〜/ .kube / config(其中〜是当前用户的主目录)。

确保您熟悉这个配置文件。配置文件可以包含多个集群、用户和上下文,但通常只有一个上下文被激活(当前上下文)。要查看上下文以及当前是哪个上下文,可以使用“kubectl config get-contexts”命令。

对于具有真实世界Kubernetes体验的人,这些命令用于从一个群集切换到另一个群集(或用于为您提供此类上下文的包装工具)。

第2步:Kubernetes API服务器

一旦找到当前上下文,就可以检索用户和服务器配置。然后,服务器信息将与kubernetes API服务器(运行在kubernetes主服务器上)联系,可以查询该服务器以获取信息,也可以进行更改。

它基本上是由双向身份验证(称为MTLS或“相互TLS”)保护的REST API。

第三步:验证

这为我们带来了身份验证步骤。首先,需要进行TLS握手。要实现这一点,您需要通常嵌入Kubernetes Config中的证书颁发机构证书(CA证书)(或者,对文件路径有引用)。

需要此证书来验证Kubernetes API服务器的身份。如果其他人通过设置假API服务器尝试了“中间的人”攻击,验证将失败,因为您需要证书颁发机构密钥(CA键),以便能够运行具有相同身份的Kubernetes服务器。

CA密钥不会与客户端共享。客户端将只能访问X.509 CA证书,以便能够验证服务器的身份,而不是创建具有相同身份的服务器。

一旦kubectl可以验证Kubernetes API服务器的身份,它将执行身份验证。为此,我们需要另一个由证书颁发机构签名的X.509证书(称为“客户端证书”)(因此我们不能仅仅组成任何证书+密钥对)和一个“客户端密钥”。

第4步:REST端点

要从Kubernetes API服务器获取POD,kubectl将使用以下URL路径命中静止端点:/ api / v1 /命名空间/默认/吊舱?限制= 500。

此端点将列出“默认”命名空间中的窗格。如果您已配置另一个默认命名空间,则它将使用该名称而不是“默认”命名空间。

每个REST调用都将使用CA证书、客户端密钥和客户端证书(如前所述)来通过Kubernetes API服务器的身份验证部分。如果缺少这些元素中的一个,您将得到一个HTTP 403 Permission Denied错误,而不是HTTP 200 OK代码。

第5步:授权

除了身份验证之外,还有一个授权部分。授权是由RBAC并且通常在任何最近的Kubernetes集群中打开默认情况下。使用RBAC,您可以控制特定资源的实体(用户,组或服务帐户)的访问。

例如,假设您正在使用用户执行“kubectl获取pods”。用户需要能够在/ API / v1 /命名空间/默认/窗口上执行HTTP GET请求。您需要ClusterRole(群集级别)或角色(命名空间级别)。如果您的用户具有预定义的群集管理角色,则您可以访问读/修改任何资源。

更深一层:附加信息

如果你在面试中列出上述步骤,这将是一个很好的答案,但还有比上面描述的更多的事情。为了准确地理解发生了什么,您可以向kubectl命令添加“-v=number”参数,以获得详细的日志级别。

例如,添加-v=10会给你跟踪级别的日志,显示所有对Kubernetes API服务器的API调用。

启用跟踪时,您可以看到第一个呼叫到/ API,发现Kubernetes API服务器的可能API。这些结果在〜/ .kube / cache中缓存,因此您将不会看到每次发生这些调用。

一个Kubernetes集群的API不一定等于另一个群集中提供的API。Kubernetes API服务器可以使用自己的API扩展,或者使用第三方的API,以向Kubernetes添加更多功能。自定义资源定义,这通常由第三方使用,也将扩展Kubernetes API。

2.后续问题:使用什么协议与Kubernetes API服务器通信?

Kube API Server使用REST,所以通常,JSON是用于Kubernetes客户端(如kubectl)和Kube API Server之间的通信。

3.后续问题:如何编写Kubernetes客户端?

为了提供一些上下文,您可以编写客户端捆绑与您的CI / CD管道进行部署或对Kubernetes环境进行小的更改。如果您要处理的话,您也将要编写客户Kubernetes运营商

要编写Kubernetes客户端,您需要能够休息呼叫。任何编程语言都可以休息呼叫,但手动编写所有呼叫可能很麻烦。这就是为什么Kubernetes为最受欢迎的编程语言维护客户端SDK。您将要使用此SDK。

在实现SDK时,您需要处理身份验证。最简单的方法是提供kubectl配置文件,就像使用kubectl时那样。如果您是针对云托管的Kubernetes集群进行身份验证,流程可能会有所不同,因此请务必检查云提供商的文档。

4.可以采取哪些安全措施来确保舱级安全?

最佳实践说,避免以root运行运行容器,避免访问主级文件系统 - 以及这些策略应该强制执行。这样做的一种方法是通过PodSecurityPolicies.此资源可以控制POD规范级别的安全方面。

云上发生了很多kubernetes的部署。可以在那里采取哪些安全措施?

所有主要云提供商现在都有托管的Kubernetes产品。云部署与内部部署截然不同,您必须预测自己的弱点。

用私人控制飞机发射

第一步是确保使用私有控制平面启动群集,从外互联网中没有人可以连接到Kubernetes API服务器。所有主要的云提供商现在都有这个选项(不幸的是,这是最初推出的情况下的情况)。

控制进出口

完成此操作后,您需要确保入口/出口流量也受到控制。您通常只需要一个入口,因此云负载均衡器将指向Kubernetes入口控制器。这可能是一个nginx,但有很多其他第三方解决方案,如Traefik, Ambassador, Gloo, Kong, Istio (Istio ingress gateway), Linkerd等。

对于出口,它取决于云提供商的一点。一方面,您拥有云提供的构造,如安全组和网络防火墙,可以帮助您在“云网络级别”。在集群方面,您可以使用特定的CNIS和Networkpolicies或者在ISTIO中找到的出口网关或其他服务网格产品,您可以在Kubernetes群集中进行一些过滤。

启用标识和访问管理集成

使用云提供商,您拥有云提供商的身份和访问管理产品。您需要确保您的Kubernetes安装良好的关系,以确保每个POD都有自己的(临时)凭据来访问云服务。

在AWS中,您可以将一个pod绑定到一个服务帐户,该服务帐户可以使用webtoken链接到一个IAM角色。在Azure中也有类似的东西,使用aad-pod- identity。

创建升级策略

您还需要提出坚实的升级计划,因为Kubernetes倾向于经常释放。一个升级策略在云上工作的初始策略是每次都有一个新版本部署一个新的Kubernetes群集。这被称为蓝色/绿色Kubernetes部署。如果您不保存群集中的任何App /容器的状态,则才能容易地发生 - 该状态需要仅在外部服务(云提供商上是非常可行的)保存。

除了这些措施之外,您还需要实现在内部集群上实现的所有典型的Kubernetes安全控制,比如PodSecurityPolicies。

6.你应该什么时候使用变形的威尔?

mutatingwebhook可以用来修改资源,当资源被发送到Kubernetes API服务器时。

假设您想要部署一个应用程序,因此您使用部署对象的定义运行一个“kubectl应用程序”。这个部署对象将启动一个replicasset来启动这些pods (replicasset是旧的ReplicationController的替代品)。您可以编写MutatingWebhook,将环境变量注入到pod中,这取决于pod提供的注释。

在集群上创建资源时,您可以对资源定义进行任何更改。例如,Istio使用MutatingWebhooks将sidecar注入到每个pod中,以启用服务网格。

7.解释在Kubernetes上建立运营商的步骤。

第一篇操作员是,2016年11月由CoreOS编写,解释说,运营商是“可靠地创建,配置和管理复杂应用程序实例的概念。”运营商将Kubernetes API扩展为“代表Kubernetes用户”创建,配置和管理复杂的状态应用程序的实例“。

记住这一点,您首先需要扩展Kubernetes API以创建CustomResourceDefinitions。这些是您的操作员将寻找的定制资源。与“Deployment”对象不同,您将拥有自己的自定义对象,其中包含您所选择的名称和API。

您现在需要编写实际的运算符本身 - 从头开始​​,也需要使用一个可以帮助您实现此操作员模式的已经写入的框架之一。

部署新的自定义对象(例如:使用kubectl)后,将通知操作员,并将开始工作您的自定义实现(例如:启动第三方数据库)。

您的操作员还应管理此新创建的软件(例如:在POD故障中的软件时重新启动/重新创建吊舱)。

操作员需要与Kubernetes API服务器通信以侦听自定义对象的更改。它还需要rbac权限来执行此操作。您可以看到Kubernetes的许多组件实际上与Kubernetes API服务器接口,因此kube-apiserver如何工作是理解Kubernetes的基础。

读读Kubernetes的文章,在面试中取得好成绩

在本文中,我们只涉及了Kubernetes的几个主题(尽管是非常重要的)。上面的问题已经给了你很多有趣的概念和想法,你可以进一步探索,但你应该努力把你的知识超越这些问题。

在我的Udemy课程中" Kubernetes完整课程",您可以以一种简单的方式了解Kubernetes的许多概念。一旦你掌握了基本知识,一定要检查一下。”高级Kubernetes使用”和“On-prem或云无关的Kubernetes“。
要完全理解所有的概念,你需要仔细看一看官方Kubernetes文档(这是最权威的资料来源),以便更深入地了解Kubernetes的工作原理。

DevOps的顶级课程

使用管道和码头的Jenkins学习Devops:CI / CD
爱德华venene.
4.6 (9485)
收视率最高
Devops为初学者 - Docker,Kubernetes和Azure Devops
In28minute官方,Ranga Karanam |GCP认证 - Google Cloud Engineer&Architect
4.5 (3,229)
Devops目录,模式和蓝图
Viktor Farcic,Darin Pope
4.7 (125)
DevOps项目:CI/CD与Jenkins Ansible Docker Kubernetes
Valaxy Technologies | AR Shankar
4.5 (5,587)
Devops基本面 - 带AWS + Docker + Ansible + Jenkins的CI / CD
拉胡尔·赫尔蒂
4.5 (1785)
畅销书
超过Terraform认证
德里克摩根
4.7 (507)
收视率最高
DevOps项目:CICD与Git GitLab Jenkins和Laravel
敢于索里姆
4.7 (51)
畅销书

更DevOps的课程

Devops学生还学习

让你的团队。领导行业。

通过Udemy为Business获取组织的在线课程和数字学习工具库的订阅。

请求一个演示

爱德华的课程

学习大数据:Hadoop生态系统大师班
爱德华venene.
4.3 (3663)
畅销书
学习DevOps:使用Terraform实现基础设施自动化
爱德华venene.
4.4 (9,421)
畅销书
学习devops:完整的kubernetes课程
爱德华venene.
4.4 (12,694)
畅销书
使用管道和码头的Jenkins学习Devops:CI / CD
爱德华venene.
4.6 (9485)
收视率最高
学习DevOps:高级Kubernetes用法
爱德华venene.
4.1 (1,088)
在AWS和Kubernetes上使用Spinnaker持续部署
爱德华·维亚恩,约恩·詹伯斯
4.3 (903)
使用Prometheus监控和提醒
爱德华·维亚恩,约恩·詹伯斯
4.3 (2501)
畅销书
AWS高级安全
爱德华·维亚恩,约恩·詹伯斯
4.3 (224)
在Azure起程拓殖
爱德华·维亚恩,约恩·詹伯斯
4.3 (772)

爱德华的课程