跳转至

03服务和网络

考试大纲

服务和网络:20%

  • 了解集群节点上的主机网络配置

  • 理解 Pods 之间的连通性

  • 了解 ClusterIP、NodePort、LoadBalancer 服务类型和端点

  • 了解如何使用入口控制器和入口资源

  • 了解如何配置和使用 CoreDNS

  • 选择适当的容器网络接口插件

NetworkPolicy 网络策略

题目描述:

  • 设置配置环境 kubectl config use-context k8s

  • 在 internal 命名空间创建一个名为 allow-port-from-namespace 的 NetworkPolicy,确保新的 NetworkPolicy 允许 namespace internal 中的 Pods 来连接到 namespace big-corp 中的端口 9200

  • 确保新的 NetworkPolicy:

  • 不允许对没有在监听端口 9200 的 pods 访问

  • 不允许不来自 namespace internal 的 pods 的访问

官方文档:

参考解答:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-port-from-namespace
  namespace: internal
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: big-corp
      ports:
        - protocol: TCP
          port: 9200

Service 四层负载均衡

题目描述:

  • 设置配置环境 kubectl config use-context k8s

  • 请重新配置现有的 Deployment front-end 以及添加名为 http 的端口规范来公开现有容器 nginx 的端口 80/tcp。

  • 创建一个名为 front-end-svc 的新服务,以公开容器端口 http。 配置此服务,通过在排定的节点上的 NodePort 来公开各个 pods。

官方文档:

参考解答:

  • front-end Deployment 配置文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: front-end
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - name: http
          containerPort: 80
          protocol: TCP
  • 创建一个名为 front-end-svc 服务
kubectl expose deployment front-end \
--port=80 \
--target-port=80 \
--name=front-end-svc \
--type=NodePort

Ingress 七层代理

题目描述:

  • 设置配置环境 kubectl config use-context k8s

  • 如下创建一个新的 nginx ingress 资源:

  • 名称:pong

  • namespace: ing-internal

  • 使用服务端口 5678 在路径 /hello 上公开服务 hello

  • 可以使用一下命令检查服务 hello 的可用性,该命令返回 hello: curl -kL < INTERNAL_IP>/hello/

官方文档:

参考解答:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pong
  namespace: ing-internal
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /hello
        pathType: Prefix
        backend:
          service:
            name: hello
            port:
              number: 5678