Kubernetes集群(z-k8s)部署Cilium Ingress¶
说明¶
在部署 Kubernetes集群(z-k8s) 采用了 Cilium网络 ,并完成 Kubernetes集群(z-k8s)使用nerdctl 创建 Containerd环境CentOS容器运行systemd 。
要将运行的pod服务对外输出,需要部署 Ingress控制器(controller) 实现 Ingress 。
这里选择 Cilium网络 内置支持的 Cilium Kubernetes 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 cilium/cilium --version 1.12.1 \
--namespace kube-system \
--reuse-values \
--set ingressController.enabled=true
滚动重启
cilium-operator
和每个节点上的cilium
DaemonSet :
kubectl -n kube-system rollout restart deployment/cilium-operator
kubectl -n kube-system rollout restart ds/cilium
然后检查Cilium agent和operato状态:
cilium status
部署ingress¶
前置工作已经在 Kubernetes集群(z-k8s)使用nerdctl 部署容器
z-dev
定义
z-dev
的SVC:z-dev-svc.yaml
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
:
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