【问题标题】:Installation nginx-ingress for Kubernetes Cluster On Premise with CentOS7使用 CentOS7 为 Kubernetes Cluster On Premise 安装 nginx-ingress
【发布时间】:2020-02-20 12:54:10
【问题描述】:

我不确定哪个安装部分与 CentOS7 本地集群相关 在下面的链接中 https://kubernetes.github.io/ingress-nginx/deploy/

我尝试通过 helm chart 安装,但使用 type=LoadBalance 创建的服务虽然集群不在云端

我的问题是:

Helm 是不能安装 Nginx 的唯一选择(或者在我的情况下,裸机是正确的)?

如果是 helm,在安装 helm 时应该覆盖哪些参数(service.type 等...)?

谢谢

【问题讨论】:

    标签: kubernetes kubernetes-ingress nginx-ingress


    【解决方案1】:

    如果你想使用Type=LoadBalancer,那么我推荐安装METALLB

    MetalLB 是裸机 Kubernetes 集群的负载平衡器实现,使用标准路由协议。

    为什么?

    Kubernetes 不为裸机集群提供网络负载均衡器(LoadBalancer 类型的服务)的实现。 Kubernetes 附带的 Network LB 的实现都是调用各种 IaaS 平台(GCP、AWS、Azure ……)的胶水代码。如果您没有在受支持的 IaaS 平台(GCP、AWS、Azure...)上运行,LoadBalancers 在创建时将无限期地保持在“待定”状态。

    裸机集群运营商只剩下两个较小的工具来将用户流量引入他们的集群,即“NodePort”和“externalIPs”服务。这两个选项在生产使用方面都有很大的缺点,这使得裸机集群成为 Kubernetes 生态系统中的二等公民。

    MetalLB 旨在通过提供与标准网络设备集成的网络 LB 实施来纠正这种不平衡,以便裸机集群上的外部服务也尽可能“正常工作”。

    安装指南是here

    【讨论】:

      【解决方案2】:

      使用 helm 可以将 controller.service.type 设置为 NodePort。这样 nginx 入口控制器就会创建一个 NodePort 服务,您可以通过创建 ingress resource 来使用 NodeIP 和 NodePort 访问后端 kubernetes 服务。

      话虽如此,helm chart 中没有提供默认配置以使其在裸机上工作。所以你需要多试几次。否则,您可以使用为 bare metal 提供的标准 yaml,它使用 NodePort。

      【讨论】:

      • 感谢您的帮助。 Centos 被认为是裸机?
      【解决方案3】:

      在裸机安装中默认不能使用Ingress,需要使用MetalLB。

      Nginx docs 展示了如何设置 MetalLB 以允许您的裸机集群使用 LoadBalancer 服务。

      MetalLB 为不在受支持的云提供商上运行的 Kubernetes 集群提供网络负载均衡器实现,从而有效地允许在任何集群中使用 LoadBalancer 服务。

      基本上,设置很简单:

      kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.3/manifests/metallb.yaml
      

      然后创建一个ConfigMap来配置: - 根据您的网络编辑 ip 范围

      apiVersion: v1
      kind: ConfigMap
      metadata:
        namespace: metallb-system
        name: config
      data:
        config: |
          address-pools:
          - name: default
            protocol: layer2
            addresses:
            - 192.168.1.240-192.168.1.250 <= EDIT IP RANGE
      

      检查安装输入kubectl get pods -n metallb-system,这是预期的输出:

      $ kubectl get pods -n metallb-system
      NAME                          READY   STATUS    RESTARTS   AGE
      controller-65895b47d4-6wzfr   1/1     Running   0          9d
      speaker-v52xj                 1/1     Running   0          9d
      

      MetalLB安装配置后可以在nginx docs后面安装Nginx Ingress:

      kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.29.0/deploy/static/mandatory.yaml
      

      然后:

      kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.29.0/deploy/static/provider/baremetal/service-nodeport.yaml
      

      如果您愿意,可以使用Helm:

      helm install my-nginx stable/nginx-ingress

      如果 kubernetes 集群启用了 RBAC,则运行:

      helm install my-nginx stable/nginx-ingress --set rbac.create=true

      如果您使用Helm 2,则使用--name 标志指定版本名称

      helm install stable/nginx-ingress --name my-nginx

      helm install stable/nginx-ingress --name my-nginx --set rbac.create=true

      检测安装的版本:

      POD_NAME=$(kubectl get pods -l app.kubernetes.io/name=ingress-nginx -o jsonpath='{.items[0].metadata.name}') kubectl exec -it $POD_NAME -- /nginx-ingress-controller --version

      参考资料:

      https://kubernetes.github.io/ingress-nginx/deploy/

      https://metallb.universe.tf/

      【讨论】:

        【解决方案4】:

        我通过helm chart找到了裸机安装nginx的方法:

        helm install iedit-nginx stable/nginx-ingress --namespace kube-system --set controller.service.type=NodePort
        --set controller.image.pullPolicy=IfNotPresent --版本 1.33.1

        【讨论】:

          猜你喜欢
          • 2022-08-02
          • 2020-10-17
          • 1970-01-01
          • 1970-01-01
          • 2023-01-13
          • 2020-07-26
          • 2022-06-17
          • 1970-01-01
          • 2021-02-28
          相关资源
          最近更新 更多