尝试使用Nginx Ingress Controller作为ARO中的Ingress

首先

ARO(Azure Red Hat OpenShift)中已经存在标准的Ingress Controller,但我想尝试使用Nginx的Ingress Operator来代替标准的Ingress,使用Nginx的Ingress Controller。

ARO是什么?

ARO是在Azure上提供的托管服务,用于Red Hat OpenShift。虽然名称格式有所不同,但简单来说,它是Red Hat版本的AKS、EKS和GKE。

使用的是Red Hat 的 Kubernetes 发行版OpenShift。

这篇文章的内容基本上与之前写的“使用ROSA和Nginx Ingress Operator”几乎相同,不过在Azure方面的规格上有些许差异,例如负载均衡器的名称是IP地址,还有些其他略微不同的地方。考虑到写在前一篇文章中会使区分阅读变得困难,所以我只改变了这一部分并另写了一篇新文章。

尽管 OpenShift 側的安装步骤完全相同,但本文专注于安装过程,省略了详细的考查。

请提供相应的参考文献。

我参考了以下GitHub存储库。ROSA和步骤本身是一样的。

 

安装 Nginx Ingress Operator

从Operator Hub安装Ingress Operator。

image.png
image.png
image.png

创建 Nginx Ingress Controller

创建Nginx Ingress Controller。通过创建NginxIngress资源,将生成Nginx Ingress Controller的Pod。

创建 SCC

在创建 Ingress Controller之前,OpenShift 需要以下链接中的 yaml 文件中的 SCC(安全上下文约束)。

kubectl apply -f https://raw.githubusercontent.com/nginxinc/nginx-ingress-helm-operator/main/resources/scc.yaml

创建NginxIngess资源(Ingress Controller)。

image.png
image.png
image.png

上面的Pod是操作员的主体。可以从名称”nginxingress-sample-nginx-ingress-controller-79f4b97478-hkdjf”看出,该Pod(下面的行)是一个针对NginxIngress资源创建的Nginx Ingress Controller。

$ oc get pods
NAME                                                            READY   STATUS    RESTARTS   AGE
nginx-ingress-operator-controller-manager-5c8fcfd66b-w7l6d      2/2     Running   0          42m
nginxingress-sample-nginx-ingress-controller-79f4b97478-hkdjf   1/1     Running   0          9m55s
$  

我也会检查Service。已经创建了一个Type=Loadbalancer的Service资源。

$ oc get svc
NAME                                                        TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)                      AGE
nginx-ingress-operator-controller-manager-metrics-service   ClusterIP      172.30.119.163   <none>         8443/TCP                     45m
nginxingress-sample-nginx-ingress-controller                LoadBalancer   172.30.242.187   20.22.71.185   80:31599/TCP,443:31697/TCP   13m
$ 

样本应用程序的部署

创建一个名为hello-openshift的新项目(命名空间)来部署应用程序。

oc new-project hello-openshift

部署应用程序。

oc new-app --image=docker.io/openshift/hello-openshift  --labels=test=app

确认服务资源已经被创建。

 oc get svc
NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
hello-openshift   ClusterIP   172.30.184.252   <none>        8080/TCP,8888/TCP   13m
$ 

使用Ingress资源发布示例应用程序

在应用程序的项目(namespace)内创建 Ingress 资源,名称为 hello-openshift。

宛先是一个刚刚创建的名为 hello-openshift 的服务资源。

OpenShift可以处理Ingress资源和Route资源的标准功能。

为了处理通过 Nginx Ingress Controller 创建的 Ingress 资源,需要添加以下注释。

  annotations:
    kubernetes.io/ingress.class: "nginx"

创建以下的 ingress 资源。

cat << EOF > ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  defaultBackend:
    service:
      name: hello-openshift
      port:
        number: 8080
  rules:
  - host: test.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: hello-openshift
            port:
              number: 8080
EOF

我們確認 ingress 資源已經創建成功。與 ROSA(AWS) 不同的是,特點是 LoadBalancer 的顯示不是以 FQDN 的形式,而是以 IP 地址的形式顯示。

$  oc get ingress
NAME           CLASS    HOSTS              ADDRESS        PORTS   AGE
test-ingress   <none>   test.example.com   20.22.71.185   80      13m
$ 

我将使用假装为 test.example.com 的 Host 头部信息进行访问。

$ LB=20.22.71.185
$ curl -H 'Host:test.example.com' $LB
Hello OpenShift!
$ 

我可以正常访问了。

广告
将在 10 秒后关闭
bannerAds