Kubernetes集群(z-k8s)部署Cilium Ingress

说明

备注

在部署 Cilium Kubernetes Ingress 并启用之前,需要先部署 Kubernetes集群(z-k8s)配置Cilium集成MetalLB 才能确保SVC能够获得 EXTERNAL-IP

本文案例是将 Kubernetes集群(z-k8s)使用nerdctl 部署的开发所用的 z-dev 输出服务端口 22 80 443 方便后续开发测试

安装Cilium Ingress Controller

  • 使用 helm 的参数 ingressController.enabled 激活 Cilium Ingress Controller:

helm upgrade cilium激活ingress controller
helm upgrade cilium cilium/cilium --version 1.12.1 \
    --namespace kube-system \
    --reuse-values \
    --set ingressController.enabled=true
  • 滚动重启 cilium-operator 和每个节点上的 cilium DaemonSet :

cilium激活ingress controller后重启cilium-operator和cilium ds
kubectl -n kube-system rollout restart deployment/cilium-operator
kubectl -n kube-system rollout restart ds/cilium
  • 然后检查Cilium agent和operato状态:

    cilium status
    

部署ingress

定义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

备注

这里采用了简化的 TCP 端口,对外输出 22 80 443 方便开发测试,但是实际上 Ingress 是对外提供HTTP服务,负载均衡和SSL卸载,也就是传统的 Nginx 演化出来,是7层服务的虚拟机主机,直接输出TCP端口是一种简化模式。实际生产环境,应该使用 HTTP 协议

  • 创建服务:

    kubectl apply -f z-dev-svc.yaml
    
  • 准备 z-dev-ingress.yaml :

定义z-dev对外ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: z-dev-ingress
  namespace: z-dev
spec:
  ingressClassName: cilium
  selector:
    app: z-dev
  ports:
  - name: ssh
    port: 22
    targetPort: 22
  - name: http
    port: 80
    targetPort: 80
  - name: https
    port: 443
    targetPort: 443

参考