Skip to content

Services 和 Networking 测验

本测验测试你对 Kubernetes 网络概念的理解,包括 Service 类型、Ingress、NetworkPolicy 和 Service discovery。

选择题

  1. Kubernetes 中默认的 Service 类型是什么?
    • A) NodePort
    • B) LoadBalancer
    • C) ClusterIP
    • D) ExternalName
显示答案

答案: C) ClusterIP

解析: ClusterIP 是 Kubernetes 中默认的 Service 类型,它提供一个只能在集群内部访问的 IP 地址。该 Service 允许集群内的其他应用访问此 Service,但无法从集群外部访问。

  1. 哪个 API 对象会将集群外部的 HTTP 和 HTTPS 路由暴露给集群内的 Service?
    • A) Service
    • B) Ingress
    • C) Endpoint
    • D) NetworkPolicy
显示答案

答案: B) Ingress

解析: Ingress 是一个 API 对象,它会将集群外部的 HTTP 和 HTTPS 路由暴露给集群内的 Service。Ingress 提供负载均衡、SSL 终止以及基于名称的虚拟主机。

  1. 以下哪一项不是 Kubernetes 提供的 Service discovery 方法?
    • A) 环境变量
    • B) DNS
    • C) Service Mesh
    • D) ConfigMap
显示答案

答案: D) ConfigMap

解析: Kubernetes 提供两种主要的 Service discovery 方法:环境变量和 DNS。ConfigMap 用于存储配置数据,并不是 Service discovery 机制。

  1. Kubernetes 中哪种 Service 类型使 Service 可以通过所有节点上的特定端口访问?
    • A) ClusterIP
    • B) NodePort
    • C) LoadBalancer
    • D) ExternalName
显示答案

答案: B) NodePort

解析: NodePort Service 使 Service 可以通过所有节点上的特定端口访问。此 Service 类型允许通过每个节点的 IP 地址和 NodePort 值(默认分配范围为 30000-32767)访问该 Service。

  1. 哪种 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 时,这非常有用。

  1. 哪种资源提供了在 Kubernetes 中控制 Pod 之间通信的方式?
    • A) Service
    • B) Ingress
    • C) NetworkPolicy
    • D) EndpointSlice
显示答案

答案: C) NetworkPolicy

解析: NetworkPolicy 提供了控制 Pod 之间通信的方式。使用 NetworkPolicy,你可以限制 Pod 之间的入站和出站流量。

  1. Kubernetes 集群使用什么作为 DNS 服务器?
    • A) kube-dns
    • B) CoreDNS
    • C) NodeDNS
    • D) ClusterDNS
显示答案

答案: B) CoreDNS

解析: CoreDNS 是一个灵活且可扩展的 DNS 服务器,用作 Kubernetes 集群的 DNS 服务器。自 Kubernetes 1.11 起,CoreDNS 一直作为默认 DNS 服务器使用。

  1. Cilium 利用了哪种 Linux 内核技术?
    • A) iptables
    • B) netfilter
    • C) eBPF
    • D) nftables
显示答案

答案: C) eBPF

解析: Cilium 利用 Linux 内核的 eBPF(extended Berkeley Packet Filter)技术,为容器化应用提供网络连接、安全性和可观测性。

  1. 以下哪一项不是 Service Mesh 的主要功能?
    • A) Service discovery
    • B) 负载均衡
    • C) 提供持久化存储
    • D) 加密通信
显示答案

答案: C) 提供持久化存储

解析: Service Mesh 是一个基础设施层,用于管理微服务之间的通信,提供 Service discovery、负载均衡、加密、身份认证、授权和可观测性等功能。提供持久化存储并不是 Service Mesh 的主要功能。

  1. Kubernetes 中哪种 Service 类型为外部服务提供别名?
    • A) ClusterIP
    • B) NodePort
    • C) LoadBalancer
    • D) ExternalName
显示答案

答案: D) ExternalName

解析: ExternalName Service 为外部服务提供别名。此 Service 类型将一个 DNS 名称映射到外部服务的 DNS 名称。

简答题

  1. Kubernetes 中用于存储 Service 指向的 Pod 的 IP 地址和端口的资源名称是什么?
显示答案

答案: Endpoints

解析: Endpoints 是一种资源,用于存储 Service 指向的 Pod 的 IP 地址和端口。当存在与 Service 的 selector 匹配的 Pod 时,Kubernetes 会自动创建和管理 Endpoint 对象。

  1. 在 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。

  1. Kubernetes 中继承 Pod 运行所在节点 DNS 设置的 Pod DNS policy 名称是什么?
显示答案

答案: Default

解析:Default DNS policy 会继承 Pod 运行所在节点的 DNS 设置。这意味着 Pod 会原样使用节点的 /etc/resolv.conf 文件。

  1. Cilium 使用 eBPF 监控网络流并排查问题的可观测性层名称是什么?
显示答案

答案: Hubble

解析: Hubble 是 Cilium 的可观测性层,它使用 eBPF 监控网络流并排查问题。Hubble 提供网络流监控、Service 依赖关系映射、安全观测、性能分析和故障排查等功能。

  1. Kubernetes 中作为 Endpoints 的可扩展替代方案、在大型集群中提供更好性能的资源名称是什么?
显示答案

答案: EndpointSlice

解析: EndpointSlice 是 Endpoints 的可扩展替代方案,在大型集群中提供更好的性能。EndpointSlice 通过将 endpoint 拆分为多个 slice 进行管理,从而提升大型 Service 的性能。

进阶题

  1. 说明 Service Mesh(例如 Istio)如何用于管理 Kubernetes 中微服务之间的通信及其优势。
显示答案

答案:

Service Mesh 是一个基础设施层,用于管理微服务之间的通信,通过以下方式实现:

  1. Sidecar pattern:Proxy 容器(例如 Envoy)被注入到每个 Pod 中,以拦截并控制所有网络流量。

  2. Control plane:集中式管理组件(例如 Istio 的 istiod)配置并管理所有 sidecar proxy。

  3. Traffic management

yaml
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
  1. Security policies
yaml
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*"]

优势

  1. Traffic management:支持高级路由、负载均衡、流量拆分、金丝雀部署等。

  2. Security:在服务之间提供 mutual TLS (mTLS) 加密、身份认证和授权。

  3. Observability:通过分布式追踪、指标收集和日志记录监控服务之间的通信。

  4. Resilience:通过熔断器、重试、超时和故障注入提高系统弹性。

  5. Policy enforcement:可以应用速率限制、配额和访问控制等策略。

  6. Platform independence:无需更改应用代码即可添加这些功能。

Service Mesh 抽象了复杂微服务架构中服务间通信的复杂性,使开发人员能够专注于业务逻辑。

  1. 说明与传统网络方法(例如 iptables)相比,Cilium 的 eBPF 技术提供的优势,并提出在 AWS EKS 中优化 Cilium 的方法。
显示答案

答案:

Cilium 的 eBPF 技术优势

  1. Performance:eBPF 直接在内核中运行以优化数据包处理路径,相比 iptables 提供高得多的性能。尤其是当规则很多时,iptables 会执行线性搜索,而 eBPF 可以使用哈希表等高效数据结构。

  2. Scalability:即使在大型集群中,eBPF 也能保持稳定性能。随着规则数量增加,iptables 性能会迅速下降。

  3. Programmability:eBPF 可以用类 C 语言编程,从而实现复杂的网络逻辑。iptables 只支持有限的规则集。

  4. Observability:eBPF 可以收集有关网络流的详细指标,有助于故障排查和性能优化。

  5. L7 awareness:eBPF 可以识别到应用层(L7),从而允许针对 HTTP、gRPC 和 Kafka 等协议制定细粒度策略。

在 AWS EKS 中优化 Cilium 的方法

  1. 启用 AWS ENI mode
bash
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。

  1. Node group 优化
  • 选择提供足够 ENI 和 IP 地址的 instance type(例如 m5.large 或更大)
  • 配置适当的最大 Pod 数(因 instance type 而异)
  1. Performance 优化
bash
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 和原生负载均衡加速。

  1. 启用 Hubble
bash
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 以提供网络流监控和故障排查能力。

  1. Cross-cluster connectivity: 配置 Cilium Cluster Mesh,在多个 EKS 集群之间提供无缝网络连接。

  2. Monitoring 集成: 设置 Prometheus 和 Grafana 来收集并可视化 Cilium 指标。

这些优化可以在 AWS EKS 中最大化 Cilium 的性能、安全性和可观测性。

结论

通过本测验,你测试了自己对 Kubernetes Service 和 Networking 的理解。涵盖的概念包括 Service 类型、Ingress、NetworkPolicy、Service discovery、CoreDNS 和 Cilium。理解并运用这些概念,可以帮助你构建安全且可扩展的 Kubernetes 应用。