k8s安装nginx Ingress超详细指南

news2024/10/6 2:27:52

在本全面的 Ingress 指南中,您将学习如何在 Kubernetes 设置 Nginx Ingress控制器并使用 DNS 配置 Ingress。

目前有两种 Nginx Ingress 控制器。

  1. kubernetes 社区的 Nginx Ingress 控制器
  2. Nginx Inc 开发的 Nginx Ingress 控制器

我们将使用 Kubernetes 社区 Nginx 控制器。

Ingress & Nginx Ingress 控制器架构

下面是使用 Nginx Ingress 控制器的 Kubernetes Ingress 的高级架构。在本指南中,我们将学习如何在体系结构中构建设置。

Nginx ingress controller deployment architecture

先决条件

  1. Kubernetes 集群
  2. Kubectl 已安装并已通过 Kubernetes 集群的身份验证。
  3. 对 kubernetes 集群的管理员访问权限。
  4. 指向 Ingress 控制器负载均衡器 IP 的有效域。(可选)

Nginx Ingress 控制器 Kubernetes 清单

本教程中使用的所有 kubernetes 清单都托管在 Github 存储库中。

您可以按照指南直接部署 YAML 文件。

git clone https://github.com/techiescamp/nginx-ingress-controller

首先,我们将通过使用 YAML 清单部署 Nginx 控制器来了解所有关联的 Kubernetes 对象。一旦我们理解了,我们将使用 Helm 图表进行部署

注意:如果你想了解所有的 Nginx Ingress 控制器对象以及它们之间的关系,我建议你从 repo 中单独创建对象。了解其工作原理后,可以使用单个清单或 helm 图表来部署它。

如果要一次性部署所有对象,请在 termal 中打开克隆的存储库。

cd 进入 manifest 文件夹并执行以下命令。它将部署此博客中介绍的所有清单。

kubectl apply -f .

使用清单部署 Nginx Ingress 控制器

我们需要部署以下 Kubernetes 对象才能拥有一个有效的 Nginx 控制器

  1. ingress-nginx命名空间
  2. Nginx 准入控制器的服务帐户/角色/集群角色
  3. 验证 Webhook 配置
  4. 用于创建/更新 Webhook CA 捆绑包的作业
  5. Nginx 控制器部署的服务帐户/角色/集群角色
  6. Nginx 控制器配置图
  7. Nginx 控制器和准入控制器的服务
  8. Ingress 控制器部署

注意:您可以自己创建所有清单,也可以使用 Github 存储库。但是,我强烈建议您仔细检查每个清单并了解您正在部署的内容。

需要准入控制器和验证 Webhook

Kubernetes Admission Controller 是一小段代码,用于在创建 Kubernetes 对象之前对其进行验证或更新。在本例中,它是用于验证 Ingress 对象的准入控制器。准入控制器代码是侦听8443端口的 Nginx 控制器的一部分。

为什么需要 Ingress 控制器?

如果没有准入控制器,则可以部署可能包含错误配置的 Ingress 对象。错误的配置可能会破坏与 Ingress 控制器关联的所有 Ingress 规则。

使用准入控制器后,如果部署配置错误的 Ingress 对象,则会引发错误。这样,您可以确保您创建的 Ingress 对象具有正确的配置,并且不会破坏路由规则。

以下是 Nginx 的准入控制器的工作方式。

nginx ingress controller validation admission controller explained.

  1. 部署 Ingress YAML 时,验证允许会截获请求。
  2. 然后,Kubernetes API 根据准入 Webhook 终结点将 Ingress 对象发送到验证准入控制器服务终结点。
  3. Service 将请求发送到端口 8443 上的 Nginx 部署,以验证 ingress 对象。
  4. 然后,准入控制器向 k8s API 发送响应。
  5. 如果响应有效,API 将创建 ingress 对象。

现在,让我们从为 Ingress 控制器创建 Kubernetes 对象开始。

注意:在以下各节中,您不必复制和创建 YAML 文件。您可以直接使用存储库中的文件并部署它。我在这里给出了完整的 YAML 以供参考。

创建 Namespace

我们将把所有Nginx控制器对象部署在 ingress-nginx 命名空间中。

kubectl create ns ingress-nginx

创建 Admin 控制器角色和服务帐户

我们需要一个具有所需权限的 Role 和 ClusterRole,并绑定到 ingress-nginx-admission 服务帐户。

创建一个名为 admission-service-account.yaml 的文件。

---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx-admission
  namespace: ingress-nginx

---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  annotations:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx-admission
  namespace: ingress-nginx
rules:
- apiGroups:
  - ""
  resources:
  - secrets
  verbs:
  - get
  - create

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx-admission
  namespace: ingress-nginx
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: ingress-nginx-admission
subjects:
- kind: ServiceAccount
  name: ingress-nginx-admission
  namespace: ingress-nginx


---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx-admission
rules:
- apiGroups:
  - admissionregistration.k8s.io
  resources:
  - validatingwebhookconfigurations
  verbs:
  - get
  - update

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx-admission
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: ingress-nginx-admission
subjects:
- kind: ServiceAccount
  name: ingress-nginx-admission
  namespace: ingress-nginx

部署清单

kubectl apply -f admission-service-account.yaml 

创建验证 Webhook 配置

创建一个名为 validating-webhook.yaml 的文件,并复制以下内容。

---
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx-admission
webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    service:
      name: ingress-nginx-controller-admission
      namespace: ingress-nginx
      path: /networking/v1/ingresses
  failurePolicy: Fail
  matchPolicy: Equivalent
  name: validate.nginx.ingress.kubernetes.io
  rules:
  - apiGroups:
    - networking.k8s.io
    apiVersions:
    - v1
    operations:
    - CREATE
    - UPDATE
    resources:
    - ingresses
  sideEffects: None

创建 ValidatingWebhookConfiguration

kubectl apply -f validating-webhook.yaml

部署 Job 更新 Webhook 证书

ValidatingWebhookConfiguration 只在 HTTPS 上有效,所以它需要一个 CA bundle。

我们使用 kube-webhook-certgen 与第一个 job 一起生成 CA 证书包。生成的CA证书存储在一个名为 ingress-nginx-admission 的秘密文件中。

创建一个名为 jobs.yaml 的文件,并复制以下内容:

---
apiVersion: batch/v1
kind: Job
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx-admission-create
  namespace: ingress-nginx
spec:
  template:
    metadata:
      labels:
        app.kubernetes.io/component: controller
        app.kubernetes.io/instance: ingress-nginx
        app.kubernetes.io/name: ingress-nginx
      name: ingress-nginx-admission-create
    spec:
      containers:
      - args:
        - create
        - --host=ingress-nginx-controller-admission,ingress-nginx-controller-admission.$(POD_NAMESPACE).svc
        - --namespace=$(POD_NAMESPACE)
        - --secret-name=ingress-nginx-admission
        env:
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20231011-8b53cabe0
        imagePullPolicy: IfNotPresent
        name: create
        securityContext:
          allowPrivilegeEscalation: false
      nodeSelector:
        kubernetes.io/os: linux
      restartPolicy: OnFailure
      securityContext:
        runAsNonRoot: true
        runAsUser: 2000
      serviceAccountName: ingress-nginx-admission
---
apiVersion: batch/v1
kind: Job
metadata:
  labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx-admission-patch
  namespace: ingress-nginx
spec:
  template:
    metadata:
      labels:
        app.kubernetes.io/component: admission-webhook
        app.kubernetes.io/instance: ingress-nginx
        app.kubernetes.io/name: ingress-nginx
      name: ingress-nginx-admission-patch
    spec:
      containers:
      - args:
        - patch
        - --webhook-name=ingress-nginx-admission
        - --namespace=$(POD_NAMESPACE)
        - --patch-mutating=false
        - --secret-name=ingress-nginx-admission
        - --patch-failure-policy=Fail
        env:
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20231011-8b53cabe0
        imagePullPolicy: IfNotPresent
        name: patch
        securityContext:
          allowPrivilegeEscalation: false
      nodeSelector:
        kubernetes.io/os: linux
      restartPolicy: OnFailure
      securityContext:
        runAsNonRoot: true
        runAsUser: 2000
      serviceAccountName: ingress-nginx-admission

创建 jobs

kubectl apply -f jobs.yaml

使用以下命令验证 jobs 完成情况。

一旦作业被执行,就可以describe  ValidatingWebhookConfigurationand

kubectl describe ValidatingWebhookConfiguration ingress-nginx-admission

创建 Ingress 控制器角色和服务帐户

创建名为 ingress-service-account.yaml 的文件,并复制以下内容。

---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx
  namespace: ingress-nginx

---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx
  namespace: ingress-nginx
rules:
- apiGroups:
  - ""
  resources:
  - namespaces
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - configmaps
  - pods
  - secrets
  - endpoints
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - services
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - networking.k8s.io
  resources:
  - ingresses
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - networking.k8s.io
  resources:
  - ingresses/status
  verbs:
  - update
- apiGroups:
  - networking.k8s.io
  resources:
  - ingressclasses
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resourceNames:
  - ingress-controller-leader
  resources:
  - configmaps
  verbs:
  - get
  - update
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - create
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - patch

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx
  namespace: ingress-nginx
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: ingress-nginx
subjects:
- kind: ServiceAccount
  name: ingress-nginx
  namespace: ingress-nginx

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx
rules:
- apiGroups:
  - ""
  resources:
  - configmaps
  - endpoints
  - nodes
  - pods
  - secrets
  - namespaces
  verbs:
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - services
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - networking.k8s.io
  resources:
  - ingresses
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - patch
- apiGroups:
  - networking.k8s.io
  resources:
  - ingresses/status
  verbs:
  - update
- apiGroups:
  - networking.k8s.io
  resources:
  - ingressclasses
  verbs:
  - get
  - list
  - watch

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: ingress-nginx
subjects:
- kind: ServiceAccount
  name: ingress-nginx
  namespace: ingress-nginx

 部署清单

kubectl apply -f ingress-service-account.yaml

创建 Configmap

有了configmap,你可以自定义 Nginx 的设置。例如,可以设置自定义 headers 和大多数 Nginx 设置。

有关所有支持的配置,请参阅官方社区文档。

创建名为 services.yaml 的文件并复制以下内容。

<span style="background-color:var(--cs-color-contrast-200)"><span style="color:#000000"><code>---
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  externalTrafficPolicy: Local
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - appProtocol: http
    name: http
    port: 80
    protocol: TCP
    targetPort: http
  - appProtocol: https
    name: https
    port: 443
    protocol: TCP
    targetPort: https
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  type: LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx-controller-admission
  namespace: ingress-nginx
spec:
  ports:
  - appProtocol: https
    name: https-webhook
    port: 443
    targetPort: webhook
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  type: ClusterIP</code></span></span>

创建服务。

kubectl apply -f services.yaml

ingress-nginx-controller service 在正在部署的相应云平台中创建负载均衡器

您可以使用以下命令获取负载均衡器 IP/DNS。

kubectl --namespace ingress-nginx get services -o wide -w ingress-nginx-controller

注意:对于每个云提供商,您可以使用特定的注释将静态 IP 地址和其他配置映射到 Loadbalancer。

创建 Ingress Controller 部署

创建名为 deployment.yaml 的文件并复制以下内容。

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  minReadySeconds: 0
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app.kubernetes.io/component: controller
      app.kubernetes.io/instance: ingress-nginx
      app.kubernetes.io/name: ingress-nginx
  template:
    metadata:
      labels:
        app.kubernetes.io/component: controller
        app.kubernetes.io/instance: ingress-nginx
        app.kubernetes.io/name: ingress-nginx
    spec:
      containers:
      - args:
        - /nginx-ingress-controller
        - --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
        - --election-id=ingress-controller-leader
        - --controller-class=k8s.io/ingress-nginx
        - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
        - --validating-webhook=:8443
        - --validating-webhook-certificate=/usr/local/certificates/cert
        - --validating-webhook-key=/usr/local/certificates/key
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: LD_PRELOAD
          value: /usr/local/lib/libmimalloc.so
        image: registry.k8s.io/ingress-nginx/controller:v1.9.5
        imagePullPolicy: IfNotPresent
        lifecycle:
          preStop:
            exec:
              command:
              - /wait-shutdown
        livenessProbe:
          failureThreshold: 5
          httpGet:
            path: /healthz
            port: 10254
            scheme: HTTP
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        name: controller
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
        - containerPort: 443
          name: https
          protocol: TCP
        - containerPort: 8443
          name: webhook
          protocol: TCP
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /healthz
            port: 10254
            scheme: HTTP
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        resources:
          requests:
            cpu: 100m
            memory: 90Mi
        securityContext:
          allowPrivilegeEscalation: true
          capabilities:
            add:
            - NET_BIND_SERVICE
            drop:
            - ALL
          runAsUser: 101
        volumeMounts:
        - mountPath: /usr/local/certificates/
          name: webhook-cert
          readOnly: true
      dnsPolicy: ClusterFirst
      nodeSelector:
        kubernetes.io/os: linux
      serviceAccountName: ingress-nginx
      terminationGracePeriodSeconds: 300
      volumes:
      - name: webhook-cert
        secret:
          secretName: ingress-nginx-admission

创建部署。

kubectl apply -f deployment.yaml

要确保部署正常工作,请检查容器状态。

kubectl get pods -n ingress-nginx

验证 Ingress Controller 部署

您可以使用服务创建的 LoadBlancer 终结点验证 Ingress 控制器部署。

Nginx Ingress 控制器具有默认后端。Ingress 中没有条目的所有请求都将转到此默认后端。

我们将使用默认后端验证控制器。

获取 Loadbalancer 终端节点,尝试使用它。您应该收到 404 错误,如下所示。

现在尝试使用 curl 访问 /heathz url,如下所示。你应该得到 200 的回复。将 <LOAD-BALANCER-ENDPOINT> 替换为您的 Loadbalancer 终端节点。

curl http://<LOAD-BALANCER-ENDPOINT>/healthz

Nginx Ingress Controller Helm 部署

如果您是 Helm 用户,则可以使用社区 Helm 图表部署 Ingress Controller。 ValidatingWebhookConfiguration 默认处于禁用状态。

部署 helm 图表。如果 ingress-nginx 不存在,它将创建命名空间。

helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx --create-namespace

验证 helm 版本。

helm list -n ingress-nginx

若要清理资源,请卸载该版本。

 helm uninstall ingress-nginx -n ingress-nginx

将域名映射到 Nginx Ingress Loadbalancer IP

Ingress 的主要目标是接收运行在 Kubernetes 上的服务的外部流量。理想情况下,在项目中,DNS 将映射到 Ingress 控制器负载均衡器 IP。

这可以通过具有您拥有的域名的相应 DNS 提供商来完成。

信息:对于面向 Internet 的应用,它将是指向负载均衡器的公共 IP 的公共 DNS。如果是内部应用,则它将是映射到专用负载均衡器 IP 的组织专用 DNS。

单个 DNS 映射

您可以将单个域作为 A 记录直接映射到负载均衡器 IP。使用此选项,Ingress 控制器只能有一个域和多个基于路径的流量路由。

例如

www.example.com --> Loadbalancer IP

您还可以使用此模型进行基于路径的路由。

几个例子,

http://www.example.com/app1
http://www.example.com/app2
http://www.example.com/app1/api
http://www.example.com/app2/api

通配符 DNS 映射

如果将通配符 DNS 映射到负载均衡器,则可以通过 Ingress 获得动态 DNS 终结点。

在 DNS 记录中添加通配符条目后,需要在 Ingress 对象中提及所需的 DNS,Nginx Ingress 控制器将负责将其路由到所需的服务终结点。

例如,检查以下两个映射。

*.example.com --> Loadbalancer IP
*.apps.example.com --> Loadbalancer IP 

这样,您可以通过单个 Ingress 控制器拥有多个动态子域,并且每个 DNS 都可以拥有自己的基于路径的路由。

几个例子,

#URL one

http://demo1.example.com/api
http://demo1.example.com/api/v1
http://demo1.example.com/api/v2

#app specific urls

http://grafana.apps.example.com
http://prometheus.apps.example.com

#URL two

http://demo2.apps.example.com/api
http://demo2.apps.example.com/api/v1
http://demo2.apps.example.com/api/v2

出于演示目的,我已将通配符 DNS 映射到 LoadBalancer IP。根据您的 DNS 提供商,您可以添加 DNS 记录。

下图显示了我用于此博客演示的 DNS 记录。我使用了 EKS,因此我有一个网络负载均衡器终端节点的 DNS,而不是 Loadnbalacer IP,它将是一个 CNAME。在 GKE 的情况下,您将获得一个 IP,在这种情况下,您需要创建一个 A 记录。

nginx 入口控制器 DNS 映射

部署 Demo 应用程序

为了测试 Ingress ,我们将部署一个演示应用程序,并向其添加一个 ClusterIp 服务。此应用程序只能在群集中访问,而不能进入。

步骤1: 创建名为 dev 的命名空间

kubectl create namespace dev

步骤2:创建名为hello-app.yaml的文件,并复制以下内容。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-app
  namespace: dev
spec:
  selector:
    matchLabels:
      app: hello
  replicas: 2
  template:
    metadata:
      labels:
        app: hello
    spec:
      containers:
      - name: hello
        image: "gcr.io/google-samples/hello-app:2.0"

步骤3:使用 kubectl 创建部署

kubectl create -f hello-app.yaml

检查部署状态。

kubectl get deployments -n dev

步骤5:创建一个名为并复制以下内容的文件并保存该文件。hello-app-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: hello-service
  namespace: dev
  labels:
    app: hello
spec:
  type: ClusterIP
  selector:
    app: hello
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

步骤6:使用 kubectl 创建服务。

kubectl create -f hello-app-service.yaml

为应用程序创建 Ingress 对象

现在,让我们创建一个 Ingress 对象,以使用 DNS 访问我们的 hello 应用。Ingress 对象只不过是一组路由规则。

如果你想知道ingress对象是如何连接到 Nginx 控制器的,ingress 控制器 pod 连接到 ingress API来检查规则,并相应地更新它的 nginx .conf。

因为我用 DNS 提供程序映射了通配符DNS (*.apps.mlopshub.com),所以我将使用 demo.apps.mlopshub.com 指向 hello app 服务。

步骤1:创建一个名为ingress.yaml文件

步骤2:复制以下内容并保存文件。

替换demo.apps.mlopshub.comdevdev为您的域名。此外,我们在命名空间中创建此Ingress 对象,因为 hello 应用正在命名空间中运行。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  namespace: dev
spec:
  ingressClassName: nginx
  rules:
  - host: "demo.apps.mlopshub.com"
    http:
      paths:
        - pathType: Prefix
          path: "/"
          backend:
            service:
              name: hello-service
              port:
                number: 80

步骤3:描述为检查配置而创建的 Ingress 对象。

kubectl describe ingress  -n dev

现在,如果我尝试访问域demo.apps.mlopshub.com,我将能够访问hello应用程序,如下所示。(您应该将其替换为您的域名) 

您可能会在浏览器中遇到 https 错误。在这种情况下,您可以使用 curl 命令来验证 Ingress 端点。

curl demo.apps.mlopshub.com

结论

在本文中,我们学习了如何设置 Nginx Ingress 控制器。

这很容易上手。但是,对于项目实现,请确保您完成所有 Nginx 配置并根据要求进行调整

使用 Nginx 控制器配置映射,您可以配置所有 Nginx 设置,而无需重新部署控制器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1662235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Qt 学习笔记】Qt常用控件 | 多元素控件 | Table Widget的说明及介绍

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 多元素控件 | Table Widget的说明及介绍 文章编号&#…

内存拆解分析表:学习版[图片]

对拆解system中主要是对比测试机和对比机之间的差距&#xff0c;测试机那些地方高于对比机 拆解表&#xff0c;作为理解 在拆解表中system测试机比对比机多出113M 这说明是有问题的 对system拆解&#xff1a; system12345对比机9102294380941069391081628测试机10252010331…

腾讯云服务器部署前后端服务

服务器&#xff1a;OpenCloudOS &#xff08;兼容centos8&#xff09; 后端&#xff1a;javaSpringboot 前端&#xff1a;Vue 下载jdk 1&#xff09;下载jdk11 wget https://download.java.net/openjdk/jdk11/ri/openjdk-1128_linux-x64_bin.tar.gz 2&#xff09;解压jdk …

uni-appH5Android混合开发二 || 使用Android Studio打包应用APK

前言&#xff1a; 在上一章节我们已经讲了如何uni-app离线打包Android平台教程&#xff0c;这一章就该来讲讲如何使用Android Studio打包应用APK提供给Android手机安装使用了。 uni-app跨平台框架介绍和快速入门 uni-app跨平台框架介绍和快速入门 第一步、首先打开已经编译好的…

Element快速上手!

Element是饿了么公司前端团队开发的一套基于Vue的组件库&#xff0c;用于快速构建网页~ 官网链接&#xff1a; Element - The worlds most popular Vue UI frameworkElement&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库https://element.elem…

uni-app(三):离线打包与插件引用(Android)

离线打包与插件引用 1.下载Android离线SDK2.使用Android Studio打开离线打包项目并更新Gradle3.解决报错4.构建5.配置AppKeya.查看证书b.申请AppKeyc.配置AppKey 6.生成本地打包App资源7.拷贝App资源到Android项目中8.修改 appid9.修改Android项目配置文件10.下载证书并配置11.…

基于Springboot+Vue的Java项目-电影院购票系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员衣一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

开源高性能的分布式时序数据库:Lindb

Lindb&#xff1a;为大数据时代量身打造的高性能时序数据库&#xff0c;让海量数据存储与实时分析触手可及。- 精选真开源&#xff0c;释放新价值。 概览 Lindb 是一款开源的分布式时序数据库&#xff0c;它以其高性能和可伸缩性在海量数据存储及快速查询计算方面展现出独特的…

在数字化时代保持企业财务管理的持续技术创新

根据全球市场调查&#xff0c;在现阶段企业如果还不更新自身的商业运作模式&#xff0c;企业的业务可能会一点一点丧失市场竞争力。技术进步是所有行业发展的明显趋势。许多年轻的初创企业具有创新管理思维、精益求精的决策流程和现代化的商业基础设施&#xff0c;这些顺应时代…

uniapp百度地图聚合

// loadBMap.js ak 百度key export default function loadBMap(ak) {return new Promise((resolve, reject) > {//聚合API依赖基础库,因此先加载基础库再加载聚合APIasyncLoadBaiduJs(ak).then(() > {// 调用加载第三方组件js公共方法加载其他资源库// 加载聚合API// Ma…

基于STM32移植lvgl(V8.2)(SPI接口的LCD)

目录 概述 1 认识LVGL 1.1 LVGL官网 1.2 LVGL库文件下载 2 认识SPI接口型LCD 2.1 PIN引脚定义 2.2 MCU IO与LCD PIN对应关系 3 实现LCD驱动 3.1 使用STM32Cube配置Project 3.2 STM32Cube生成工程 4 移植LVGL 4.1 准备移植文件 4.2 添加lvgl库文件到项目 4.2.1 src下…

【半夜学习MySQL】表结构的操作(含表的创建、修改、删除操作,及如何查看表结构)

&#x1f3e0;关于专栏&#xff1a;半夜学习MySQL专栏用于记录MySQL数据相关内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 创建表查看表结构修改表删除表 创建表 语法&#xff1a; create table table_name(field1 datatype,field2 datatype,fiel…

springboot3项目练习详细步骤(第三部分:文章管理模块)

目录 发布文章 接口文档 业务实现 自定义参数校验 项目参数要求 实现思路 实现步骤 文章列表(条件分页) 接口文档 业务实现 mapper映射 更新文章 接口文档 业务实现 获取文章详情 接口文档 业务实现 删除文章 接口文档 业务实现 文章管理业务表结构…

Java入门基础学习笔记1——初识java

1、为什么学习java&#xff1f; 几乎统治了服务端的开发&#xff1b;几乎所有的互联网企业都使用&#xff1b;100%国内大中型企业都用&#xff1b;全球100亿的设备运行java。开发岗位薪资高。 Java的流行度很高&#xff0c;商用占有率很高。 可移植性。 2、Java的背景知识 …

Springboot集成SpringbootAdmin实现服务监控管理-10

SpringbootAdmin Spring Boot Admin是一个用于管理和监控Spring Boot应用程序的开源软件。 概要介绍 Spring Boot Admin可以监控Spring Boot单机或集群项目&#xff0c;它提供了详细的健康&#xff08;Health&#xff09;信息、内存信息、JVM系统和环境属性、垃圾回收信息、…

解决在Outlook中预定Teams会议不显示入会链接的问题

今天遇到一个很蛋疼的teams问题&#xff0c;花了点时间才解决。本来以为是很简单的问题&#xff0c;随便网上冲浪一下就能找到答案的&#xff0c;结果根本就没有好的解决方案&#xff0c;所以我分享出来希望后来的老哥少走点弯路。 问题描述 简单来说&#xff0c;就是在Outlo…

使用 MSYS2 Qt6 发布绿色版的SDR软件无线电应用

文章目录 概要整体架构流程技术名词解释技术细节在启动器中为子进程设置路径和环境。如何迅速找齐所有的DLL 小结附件 概要 新接触软件定义无线电&#xff08;SDR&#xff09;的朋友一般都会一股脑的安装一些现有的SDR平台。无论是GNURadio还是SDR、SDRSharp、SDRAngel&#x…

一文了解spring的aop知识

推荐工具 objectlog 对于重要的一些数据&#xff0c;我们需要记录一条记录的所有版本变化过程&#xff0c;做到持续追踪&#xff0c;为后续问题追踪提供思路。objectlog工具是一个记录单个对象属性变化的日志工具,工具采用spring切面和mybatis拦截器相关技术编写了api依赖包&a…

[windows系统安装/重装系统][step-3]装驱动、打驱动、系统激活

重装系统三部曲 [windows系统安装/重装系统][step-1]U盘启动盘制作&#xff0c;微软官方纯净系统镜像下载-CSDN博客 [windows系统安装/重装系统][step-2]BIOS设置UEFI引导、磁盘分区GPT分区、安装系统[含完整操作拍照图片]-CSDN博客 [windows系统安装/重装系统][step-3]装驱动…

【C++】CentOS环境搭建-安装CATCH2

【C】CentOS环境搭建-安装CATCH2 1.克隆Catch2仓库2. 进入Catch2目录3. 创建一个构建目录4. 使用CMake生成构建系统&#xff08;以及可能的编译&#xff09;5.安装Catch2&#xff08;可选&#xff0c;根据你的需求&#xff09; 1.克隆Catch2仓库 git clone https://github.com…