kind Ingress

通常对于 Kubernetes 集群部署:

备注

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 ),需要结合 extraPortMappingsnode-labels 部署集群:

    • extraPortMappings 允许本地主机在端口80和443向 Ingress controller发起请求

    • node-labels 只允许 Ingress controller 运行在符合标签选择(label selector)的特定节点

创建结合 extraPortMappingsnode-labels 的kind集群
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

Kind集群部署Ingress

参考