Skip to content

3. 服务和网络 20%

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

Understand host networking configuration on the cluster nodes

flannel


2. 理解 Pods 之间的连通性

Understand connectivity between Pods

Pod

最小的部署单位,集群中的进程,理解为 linux ,独立网络 IP、容器管理策略 pod 中容器共享 ip 和端口

  • init 容器
  • infra(pause) 容器 容器是通过 namespace 和 cgroups 隔离开的,通过 Join Namespace 来实现共享和隔离,主要提供两个功能:
    • 在 pod 中担任 Linux 命名空间共享的基础;
    • 启用 pid 命名空间,开启 init 进程。

k8s pod container linux process micro_process

container 通讯

  • node 内 pod 内:
  • node 内 pod 间:
  • node 外 pod 间

声明周期:kubectl -> api server -> etcd -> schedler -> contral manager -> kubelet -> infra 容器、init 容器、biz 容器


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

Understand ClusterIP, NodePort, LoadBalancer service types and endpoints

  1. Service 服务,网络方式有以下三种:

    • ClusterIP:默认类型,自动分配一个仅 Cluster 内部可以访问的虚拟 IP
    • NodePort:在 ClusterIP 基础上为 Service 在每台机器上绑定一个端口,这样就可以通过 <NodeIP>:NodePort 来访问该服务。
    • LoadBalancer:在 NodePort 的基础上,借助 Cloud Provider 创建一个外部的负载均衡器,并将请求转发到 <NodeIP>:NodePort
  2. EndPoint 端点


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

Know how to use Ingress controllers and Ingress resources

  1. Ingress 入口 集群外部访问集群内部服务的入口

  2. Ingress Controller 入口控制器 Ingress Controller 和之前所讲的DaemonSet 、Deployment等不同,Ingress Controller不是Controller Manager中的一部分,他只是一个或一组独立的Pod资源,他通常就是一个运行着有七层代理能力或调度能力的应用,比如:NGINX、HAproxy、Traefik、Envoy

  3. Ingress Resource

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: minimal-ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      rules:
        - http:
          paths:
            - path: /testpath
              pathType: Prefix
              backend:
              service:
                name: test
                port:
                number: 80
    

参考


5. 了解如何配置和使用 CoreDNS

Know how to configure and use CoreDNS

kubectl apply -f https://k8s.io/examples/admin/dns/dnsutils.yaml
kubectl get pods dnsutils
kubectl exec -i -t dnsutils -- nslookup kubernetes.default

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

Choose an appropriate container network interface plugin

flannel

参考

题目

  1. 创建一个Pod名称为nginx-app,镜像为nginx,并根据pod创建名为nginx-app的Service,type为NodePort
  2. 根据已有的一个nginx的pod、创建名为nginx的svc、并使用nslookup查找出service dns记录,pod的dns记录并分别写入到指定的文件中
  3. 创建pod,再创建一个service
  4. 使用ns lookup 查看service 和pod的dns
  5. 给pod创建service