Kubeernetes服务(services)

Cilium Kubernetes Ingress HTTP配置案例 我困扰于如何给Ingress配置External-IP,这需要理解Kubernetes对 公开为网络服务的抽象方法 :

  • 在 Kubernetes 中,通常使用 deployment 来部署应用,此时会使用 pod 。但是需要注意 pod 是一个有生命周期的非永久性资源,会被动态创建和销毁

  • pod 的生生死死,分配的IP地址不同,所以需要使用一种方式来管理提供工作负载的后端(也就是 workload 概念)

  • services 资源就是定义一组 pod 的访问策略 (也就是微服务) , service 针对的 pod 集合通常是使用 标签和选择器(labels and selectors) 来确定

    • deployment 中,后端的 pod 是可以互换(不区分)的,前端不应该也不必知道后端,而是通过 service 来管理

    • service 中的 pod 集合发生变化(pod的创建和销毁),则 kube-apiserver 提供的 Endpoints 资源就会更新,以提供查询(Kubernetes API 服务发现)

例如,我在 Kubernetes集群(z-k8s)使用nerdctl 定义了 deployment :

z-dev部署配置z-dev-depolyment.yaml,定义了pod输出的3个服务端口 22,80,443
apiVersion: apps/v1
kind: Deployment
metadata:
  name: z-dev
  labels:
    app: z-dev
    tier: frontend
  namespace: z-dev
spec:
  # replicas: 2
  selector:
    matchLabels:
      app: z-dev
      tier: frontend
  template:
    metadata:
      labels:
        app: z-dev
        tier: frontend
    spec:
      containers:
        - name: z-dev
          image: fedora-systemd
          imagePullPolicy: Never
          securityContext:
            privileged: true
          ports:
          - containerPort: 22
            name: z-dev-ssh
          - containerPort: 80
            name: z-dev-http
          - containerPort: 443
            name: z-dev-https

备注

在构建 deployment 中定义 labels 可以配合后面的 service 中的 selector ,也就把 podservice 关联了起来,这就是 标签和选择器(labels and selectors) 的秘密

然后,我又可以针对上述 worklod ( deployment ) 来定义 service :

定义z-dev对外服务
apiVersion: v1
kind: Service
metadata:
  name: z-dev-service
  namespace: default
spec:
  selector:
    app: z-dev
  ports:
    - name: z-dev-ssh
      protocol: TCP
      port: 22
      targetPort: 22
    - name: z-dev-http
      protocol: TCP
      port: 80
      targetPort: 80
    - name: z-dev-https
      protocol: TCP
      port: 443
      targetPort: 443

备注

定义 service 中的 port 可以映射到任意 targetPort ,而默认情况下, targetPort 设置成与 port 相同值

NodePort类型 Kubernetes服务

Service.Type=NodePort

LoadBalancer类型 Kubernetes服务

Service.Type=LoadBalancer

参考