kind Ingress¶
通常对于 Kubernetes 集群部署:
对于小型部署,可以直接通过 Kubernetes Ingress控制器 对外expose服务,类似于直接使用 Nginx 反向代理对外提供 Web Atlas
对于大型部署(云计算),需要将四层负载均衡( 如 Kubernetes MetalLB 负载均衡 )和七层负载均衡( 如 Ingress )功能分离,以便实现更高的性能和控制能力
备注
Kubernetes集群的Load Balancer和Ingress辨析 解释在Kubernetes中 LoadBalancer
是如何和 Ingress
协作
Kubernetes Ingress控制器 提供对集群中服务的外部访问进行管理,如果希望实现简化的网络模型,可以不部署 Kubernetes MetalLB 负载均衡 (四层负载均衡) ,直接采用 Ingress 对外expose Kubeernetes服务(services) 。对于采用 macOS安装Docker 需要注意,实际 Docker Atlas 是部署在一个Linux虚拟机中,所以容器(包括 kind nodes)都只能通过 port-forward
访问,此时采用 Ingress 部署方式,可以实现跨平台的通用解决方案(因为kind为 Ingress
部署做了一个Patch,直接把ingress的服务端口通过kind node的 Extra Port Mappings 转发到kind node上)。
Kind Ingress Patch方式安装集群¶
备注
我没有采用patch方式部署kind集群( Extra Port Mappings ),虽然这样比较简单,但是不是通用的Kubernetes部署模式。我希望采用完整的类似 Cilium Kubernetes Ingress HTTP配置案例 结合 Kubernetes MetalLB 负载均衡 和 Kubernetes Ingress控制器Nginx 来实现完成的 四层负载均衡 + 七层负载均衡
架构,所以我没有采用创建kind集群时结合 extraPortMappings
+ node-labels
,而是采用标准部署 Kubernetes Ingress控制器Nginx 再部署 Kubernetes MetalLB 负载均衡 。
这段仅记录
对于仅采用 Ingress 部署Kind集群(删减掉 在 kind 部署MetalLB ),需要结合
extraPortMappings
和node-labels
部署集群:
cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
EOF