Services 和 Networking 测验
本测验测试你对 Kubernetes 网络概念的理解,包括 Service 类型、Ingress、NetworkPolicy 和 Service discovery。
选择题
- Kubernetes 中默认的 Service 类型是什么?
- A) NodePort
- B) LoadBalancer
- C) ClusterIP
- D) ExternalName
显示答案
答案: C) ClusterIP
解析: ClusterIP 是 Kubernetes 中默认的 Service 类型,它提供一个只能在集群内部访问的 IP 地址。该 Service 允许集群内的其他应用访问此 Service,但无法从集群外部访问。
- 哪个 API 对象会将集群外部的 HTTP 和 HTTPS 路由暴露给集群内的 Service?
- A) Service
- B) Ingress
- C) Endpoint
- D) NetworkPolicy
显示答案
答案: B) Ingress
解析: Ingress 是一个 API 对象,它会将集群外部的 HTTP 和 HTTPS 路由暴露给集群内的 Service。Ingress 提供负载均衡、SSL 终止以及基于名称的虚拟主机。
- 以下哪一项不是 Kubernetes 提供的 Service discovery 方法?
- A) 环境变量
- B) DNS
- C) Service Mesh
- D) ConfigMap
显示答案
答案: D) ConfigMap
解析: Kubernetes 提供两种主要的 Service discovery 方法:环境变量和 DNS。ConfigMap 用于存储配置数据,并不是 Service discovery 机制。
- Kubernetes 中哪种 Service 类型使 Service 可以通过所有节点上的特定端口访问?
- A) ClusterIP
- B) NodePort
- C) LoadBalancer
- D) ExternalName
显示答案
答案: B) NodePort
解析: NodePort Service 使 Service 可以通过所有节点上的特定端口访问。此 Service 类型允许通过每个节点的 IP 地址和 NodePort 值(默认分配范围为 30000-32767)访问该 Service。
- 哪种 Service 没有集群 IP,并为每个 Pod 创建 DNS 记录?
- A) NodePort Service
- B) LoadBalancer Service
- C) Headless Service
- D) ExternalName Service
显示答案
答案: C) Headless Service
解析: Headless Service 是配置了 clusterIP: None 的 Service,它不会分配集群 IP,并会为每个 Pod 创建 DNS 记录。当客户端需要直接访问该 Service 后面的特定 Pod 时,这非常有用。
- 哪种资源提供了在 Kubernetes 中控制 Pod 之间通信的方式?
- A) Service
- B) Ingress
- C) NetworkPolicy
- D) EndpointSlice
显示答案
答案: C) NetworkPolicy
解析: NetworkPolicy 提供了控制 Pod 之间通信的方式。使用 NetworkPolicy,你可以限制 Pod 之间的入站和出站流量。
- Kubernetes 集群使用什么作为 DNS 服务器?
- A) kube-dns
- B) CoreDNS
- C) NodeDNS
- D) ClusterDNS
显示答案
答案: B) CoreDNS
解析: CoreDNS 是一个灵活且可扩展的 DNS 服务器,用作 Kubernetes 集群的 DNS 服务器。自 Kubernetes 1.11 起,CoreDNS 一直作为默认 DNS 服务器使用。
- Cilium 利用了哪种 Linux 内核技术?
- A) iptables
- B) netfilter
- C) eBPF
- D) nftables
显示答案
答案: C) eBPF
解析: Cilium 利用 Linux 内核的 eBPF(extended Berkeley Packet Filter)技术,为容器化应用提供网络连接、安全性和可观测性。
- 以下哪一项不是 Service Mesh 的主要功能?
- A) Service discovery
- B) 负载均衡
- C) 提供持久化存储
- D) 加密通信
显示答案
答案: C) 提供持久化存储
解析: Service Mesh 是一个基础设施层,用于管理微服务之间的通信,提供 Service discovery、负载均衡、加密、身份认证、授权和可观测性等功能。提供持久化存储并不是 Service Mesh 的主要功能。
- Kubernetes 中哪种 Service 类型为外部服务提供别名?
- A) ClusterIP
- B) NodePort
- C) LoadBalancer
- D) ExternalName
显示答案
答案: D) ExternalName
解析: ExternalName Service 为外部服务提供别名。此 Service 类型将一个 DNS 名称映射到外部服务的 DNS 名称。
简答题
- Kubernetes 中用于存储 Service 指向的 Pod 的 IP 地址和端口的资源名称是什么?
显示答案
答案: Endpoints
解析: Endpoints 是一种资源,用于存储 Service 指向的 Pod 的 IP 地址和端口。当存在与 Service 的 selector 匹配的 Pod 时,Kubernetes 会自动创建和管理 Endpoint 对象。
- 在 AWS EKS 中用于预置 Application Load Balancer 的 Ingress controller 名称是什么?
显示答案
答案: AWS ALB Ingress Controller
解析: AWS ALB Ingress Controller 是在 AWS EKS 中用于预置 Application Load Balancer 的 Ingress controller。该 controller 会将 Kubernetes Ingress 资源转换为 AWS ALB。
- Kubernetes 中继承 Pod 运行所在节点 DNS 设置的 Pod DNS policy 名称是什么?
显示答案
答案: Default
解析:Default DNS policy 会继承 Pod 运行所在节点的 DNS 设置。这意味着 Pod 会原样使用节点的 /etc/resolv.conf 文件。
- Cilium 使用 eBPF 监控网络流并排查问题的可观测性层名称是什么?
显示答案
答案: Hubble
解析: Hubble 是 Cilium 的可观测性层,它使用 eBPF 监控网络流并排查问题。Hubble 提供网络流监控、Service 依赖关系映射、安全观测、性能分析和故障排查等功能。
- Kubernetes 中作为 Endpoints 的可扩展替代方案、在大型集群中提供更好性能的资源名称是什么?
显示答案
答案: EndpointSlice
解析: EndpointSlice 是 Endpoints 的可扩展替代方案,在大型集群中提供更好的性能。EndpointSlice 通过将 endpoint 拆分为多个 slice 进行管理,从而提升大型 Service 的性能。
进阶题
- 说明 Service Mesh(例如 Istio)如何用于管理 Kubernetes 中微服务之间的通信及其优势。
显示答案
答案:
Service Mesh 是一个基础设施层,用于管理微服务之间的通信,通过以下方式实现:
Sidecar pattern:Proxy 容器(例如 Envoy)被注入到每个 Pod 中,以拦截并控制所有网络流量。
Control plane:集中式管理组件(例如 Istio 的 istiod)配置并管理所有 sidecar proxy。
Traffic management:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1- Security policies:
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: httpbin
namespace: foo
spec:
selector:
matchLabels:
app: httpbin
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/sleep"]
to:
- operation:
methods: ["GET"]
paths: ["/info*"]优势:
Traffic management:支持高级路由、负载均衡、流量拆分、金丝雀部署等。
Security:在服务之间提供 mutual TLS (mTLS) 加密、身份认证和授权。
Observability:通过分布式追踪、指标收集和日志记录监控服务之间的通信。
Resilience:通过熔断器、重试、超时和故障注入提高系统弹性。
Policy enforcement:可以应用速率限制、配额和访问控制等策略。
Platform independence:无需更改应用代码即可添加这些功能。
Service Mesh 抽象了复杂微服务架构中服务间通信的复杂性,使开发人员能够专注于业务逻辑。
- 说明与传统网络方法(例如 iptables)相比,Cilium 的 eBPF 技术提供的优势,并提出在 AWS EKS 中优化 Cilium 的方法。
显示答案
答案:
Cilium 的 eBPF 技术优势:
Performance:eBPF 直接在内核中运行以优化数据包处理路径,相比 iptables 提供高得多的性能。尤其是当规则很多时,iptables 会执行线性搜索,而 eBPF 可以使用哈希表等高效数据结构。
Scalability:即使在大型集群中,eBPF 也能保持稳定性能。随着规则数量增加,iptables 性能会迅速下降。
Programmability:eBPF 可以用类 C 语言编程,从而实现复杂的网络逻辑。iptables 只支持有限的规则集。
Observability:eBPF 可以收集有关网络流的详细指标,有助于故障排查和性能优化。
L7 awareness:eBPF 可以识别到应用层(L7),从而允许针对 HTTP、gRPC 和 Kafka 等协议制定细粒度策略。
在 AWS EKS 中优化 Cilium 的方法:
- 启用 AWS ENI mode:
helm install cilium cilium/cilium \
--namespace kube-system \
--set eni.enabled=true \
--set ipam.mode=eni \
--set egressMasqueradeInterfaces=eth0 \
--set tunnel=disabled此配置利用 AWS Elastic Network Interfaces (ENI) 为 Pod 分配 VPC-native IP 地址,并在没有 overlay network 的情况下提供 VPC-native networking。
- Node group 优化:
- 选择提供足够 ENI 和 IP 地址的 instance type(例如 m5.large 或更大)
- 配置适当的最大 Pod 数(因 instance type 而异)
- Performance 优化:
helm install cilium cilium/cilium \
--namespace kube-system \
--set eni.enabled=true \
--set ipam.mode=eni \
--set tunnel=disabled \
--set bpf.masquerade=true \
--set kubeProxyReplacement=strict \
--set loadBalancer.mode=dsr \
--set loadBalancer.acceleration=native此配置替换 kube-proxy,并启用 Direct Server Return (DSR) mode 和原生负载均衡加速。
- 启用 Hubble:
helm upgrade cilium cilium/cilium \
--namespace kube-system \
--reuse-values \
--set hubble.enabled=true \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true启用 Hubble 以提供网络流监控和故障排查能力。
Cross-cluster connectivity: 配置 Cilium Cluster Mesh,在多个 EKS 集群之间提供无缝网络连接。
Monitoring 集成: 设置 Prometheus 和 Grafana 来收集并可视化 Cilium 指标。
这些优化可以在 AWS EKS 中最大化 Cilium 的性能、安全性和可观测性。
结论
通过本测验,你测试了自己对 Kubernetes Service 和 Networking 的理解。涵盖的概念包括 Service 类型、Ingress、NetworkPolicy、Service discovery、CoreDNS 和 Cilium。理解并运用这些概念,可以帮助你构建安全且可扩展的 Kubernetes 应用。