安装Ingress NGINX

安装NGINX ingress controller的方法有如下几种:

  • 通过 helm 使用项目仓库chart(我采用此方法)

  • 通过 kubectl apply 使用YAML机制进行安装

  • 对于特定平台(如 minikubeMicroK8s )可以使用特定插件安装

备注

本文实践在 kind集群本地Registrykind(本地docker模拟k8s集群) 上完成

准备工作(集群部署helm)

备注

kind(本地docker模拟k8s集群) 环境在 macOS安装Docker ( Docker Desktop on Mac ),所以helm安装采用 Homebrew 。其他Linux版本请参考 helm 实践

  • macOS 安装本地 helm 客户端:

macOS 平台通过 Homebrew 安装Helm
brew install helm

备注

helm v3 开始,仅需要安装 helm 客户端(无需Tiller服务器端)

部署NGINX ingress controller

  • 使用 helm 部署安装 NGINX ingress controller :

使用helm安装NGINX ingress controller
helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx --create-namespace

安装显示:

使用helm安装NGINX ingress controller 输出信息
Release "ingress-nginx" does not exist. Installing it now.
NAME: ingress-nginx
LAST DEPLOYED: Mon Jan 30 16:47:57 2023
NAMESPACE: ingress-nginx
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace ingress-nginx get services -o wide -w ingress-nginx-controller'

An example Ingress that makes use of the controller:
  apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    name: example
    namespace: foo
  spec:
    ingressClassName: nginx
    rules:
      - host: www.example.com
        http:
          paths:
            - pathType: Prefix
              backend:
                service:
                  name: exampleService
                  port:
                    number: 80
              path: /
    # This section is only required if TLS is to be enabled for the Ingress
    tls:
      - hosts:
        - www.example.com
        secretName: example-tls

If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:

  apiVersion: v1
  kind: Secret
  metadata:
    name: example-tls
    namespace: foo
  data:
    tls.crt: <base64 encoded cert>
    tls.key: <base64 encoded key>
  type: kubernetes.io/tls
  • 执行检查安装进度:

检查NGINX ingress controller安装进度
kubectl --namespace ingress-nginx get services -o wide -w ingress-nginx-controller

提示信息:

检查NGINX ingress controller状态pending
NAME                       TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE   SELECTOR
ingress-nginx-controller   LoadBalancer   10.96.174.5   <pending>     80:31132/TCP,443:32477/TCP   38s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx

这里看到 EXTERNAL-IP pending 状态是因为没有安装 Kubernetes MetalLB 负载均衡 ,请参考 裸金属(bare-metal) NGINX Ingress

参考