暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mac 上学习k8s系列(2)安装ingress-nginx

一个应用是如何在k8s上跑起来的呢,当然我们可以直接把service 暴露出来给外网访问。更常见的做法是经过一个网关的处理,比如权限校验,加密等等。k8s网关有很多选择比如istio,traefix,ingress-nginx等等。ingress-nginx可以被简单理解为nginx-lua,性能比nginx官方维护的版本差一些。下面介绍下如何给予ingress-nginx搭建应用。

1,部署ingress-nginx

    curl -o ingress-nginx.yaml https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-0.32.0/deploy/static/provider/cloud/deploy.yaml
    kubectl apply -f ingress-nginx.yaml

    看一下我们ingress-nginx-controller已经起来了

       % kubectl get pods --all-namespaces -l app.kubernetes.io/name=ingress-nginx
      NAMESPACE NAME READY STATUS RESTARTS AGE
      ingress-nginx ingress-nginx-admission-create-hszqp 0/1 Completed 0 49s
      ingress-nginx ingress-nginx-admission-patch-q87l4 0/1 Completed 0 48s
      ingress-nginx ingress-nginx-controller-98f46f89d-g27tk 0/1 ContainerCreating 0 59s

      使用helm方式安装,类似

        brew install helm
        helm repo add stable http://mirror.azure.cn/kubernetes/charts/
        helm search repo ingress-nginx


        helm install ingress-nginx-0440 ingress-nginx/ingress-nginx

        ingress-nginx-admission-xxx 的状态是completed,说明job已经完成了,是正常状态。


        对于mac m1 推荐安装0.44.0版本

          curl -o ingress-nginx.yaml https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.44.0/deploy/static/provider/cloud/deploy.yaml

          官方版本不太好下载,建议下载阿里云的版本

            registry.cn-hangzhou.aliyuncs.com/acs/aliyun-ingress-controller:v0.44.0.1-5e842447b-aliyun

            完整可用的配置文件如下



              apiVersion: v1
              kind: Namespace
              metadata:
              name: ingress-nginx
              labels:
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx


              ---
              # Source: ingress-nginx/templates/controller-serviceaccount.yaml
              apiVersion: v1
              kind: ServiceAccount
              metadata:
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: controller
              name: ingress-nginx
              namespace: ingress-nginx
              ---
              # Source: ingress-nginx/templates/controller-configmap.yaml
              apiVersion: v1
              kind: ConfigMap
              metadata:
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: controller
              name: ingress-nginx-controller
              namespace: ingress-nginx
              data:
              ---
              # Source: ingress-nginx/templates/clusterrole.yaml
              apiVersion: rbac.authorization.k8s.io/v1
              kind: ClusterRole
              metadata:
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              name: ingress-nginx
              rules:
              - apiGroups:
              - ''
              resources:
              - configmaps
              - endpoints
              - nodes
              - pods
              - secrets
              verbs:
              - list
              - watch
              - apiGroups:
              - ''
              resources:
              - nodes
              verbs:
              - get
              - apiGroups:
              - ''
              resources:
              - services
              verbs:
              - get
              - list
              - watch
              - apiGroups:
              - extensions
              - networking.k8s.io # k8s 1.14+
              resources:
              - ingresses
              verbs:
              - get
              - list
              - watch
              - apiGroups:
              - ''
              resources:
              - events
              verbs:
              - create
              - patch
              - apiGroups:
              - extensions
              - networking.k8s.io # k8s 1.14+
              resources:
              - ingresses/status
              verbs:
              - update
              - apiGroups:
              - networking.k8s.io # k8s 1.14+
              resources:
              - ingressclasses
              verbs:
              - get
              - list
              - watch
              ---
              # Source: ingress-nginx/templates/clusterrolebinding.yaml
              apiVersion: rbac.authorization.k8s.io/v1
              kind: ClusterRoleBinding
              metadata:
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              name: ingress-nginx
              roleRef:
              apiGroup: rbac.authorization.k8s.io
              kind: ClusterRole
              name: ingress-nginx
              subjects:
              - kind: ServiceAccount
              name: ingress-nginx
              namespace: ingress-nginx
              ---
              # Source: ingress-nginx/templates/controller-role.yaml
              apiVersion: rbac.authorization.k8s.io/v1
              kind: Role
              metadata:
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: controller
              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:
              - extensions
              - networking.k8s.io # k8s 1.14+
              resources:
              - ingresses
              verbs:
              - get
              - list
              - watch
              - apiGroups:
              - extensions
              - networking.k8s.io # k8s 1.14+
              resources:
              - ingresses/status
              verbs:
              - update
              - apiGroups:
              - networking.k8s.io # k8s 1.14+
              resources:
              - ingressclasses
              verbs:
              - get
              - list
              - watch
              - apiGroups:
              - ''
              resources:
              - configmaps
              resourceNames:
              - ingress-controller-leader-nginx
              verbs:
              - get
              - update
              - apiGroups:
              - ''
              resources:
              - configmaps
              verbs:
              - create
              - apiGroups:
              - ''
              resources:
              - events
              verbs:
              - create
              - patch
              ---
              # Source: ingress-nginx/templates/controller-rolebinding.yaml
              apiVersion: rbac.authorization.k8s.io/v1
              kind: RoleBinding
              metadata:
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: controller
              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
              ---
              # Source: ingress-nginx/templates/controller-service-webhook.yaml
              apiVersion: v1
              kind: Service
              metadata:
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: controller
              name: ingress-nginx-controller-admission
              namespace: ingress-nginx
              spec:
              type: ClusterIP
              ports:
              - name: https-webhook
              port: 443
              targetPort: webhook
              selector:
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/component: controller
              ---
              # Source: ingress-nginx/templates/controller-service.yaml
              apiVersion: v1
              kind: Service
              metadata:
              annotations:
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: controller
              name: ingress-nginx-controller
              namespace: ingress-nginx
              spec:
              type: LoadBalancer
              externalTrafficPolicy: Local
              ports:
              - name: http
              port: 80
              protocol: TCP
              targetPort: http
              - name: https
              port: 443
              protocol: TCP
              targetPort: https
              selector:
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/component: controller
              ---
              # Source: ingress-nginx/templates/controller-deployment.yaml
              apiVersion: apps/v1
              kind: Deployment
              metadata:
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: controller
              name: ingress-nginx-controller
              namespace: ingress-nginx
              spec:
              selector:
              matchLabels:
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/component: controller
              revisionHistoryLimit: 10
              minReadySeconds: 0
              template:
              metadata:
              labels:
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/component: controller
              spec:
              dnsPolicy: ClusterFirst
              containers:
              - name: controller
              image: registry.cn-hangzhou.aliyuncs.com/acs/aliyun-ingress-controller:v0.44.0.1-5e842447b-aliyun
              imagePullPolicy: IfNotPresent
              lifecycle:
              preStop:
              exec:
              command:
              - /wait-shutdown
              args:
              - /nginx-ingress-controller
              - --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
              - --election-id=ingress-controller-leader
              - --ingress-class=nginx
              - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
              - --validating-webhook=:8443
              - --validating-webhook-certificate=/usr/local/certificates/cert
              - --validating-webhook-key=/usr/local/certificates/key
              securityContext:
              capabilities:
              drop:
              - ALL
              add:
              - NET_BIND_SERVICE
              runAsUser: 101
              allowPrivilegeEscalation: true
              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
              livenessProbe:
              httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
              initialDelaySeconds: 10
              periodSeconds: 10
              timeoutSeconds: 1
              successThreshold: 1
              failureThreshold: 5
              readinessProbe:
              httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
              initialDelaySeconds: 10
              periodSeconds: 10
              timeoutSeconds: 1
              successThreshold: 1
              failureThreshold: 3
              ports:
              - name: http
              containerPort: 80
              protocol: TCP
              - name: https
              containerPort: 443
              protocol: TCP
              - name: webhook
              containerPort: 8443
              protocol: TCP
              volumeMounts:
              - name: webhook-cert
              mountPath: /usr/local/certificates/
              readOnly: true
              resources:
              requests:
              cpu: 100m
              memory: 90Mi
              nodeSelector:
              kubernetes.io/os: linux
              serviceAccountName: ingress-nginx
              terminationGracePeriodSeconds: 300
              volumes:
              - name: webhook-cert
              secret:
              secretName: ingress-nginx-admission
              ---
              # Source: ingress-nginx/templates/admission-webhooks/validating-webhook.yaml
              # before changing this value, check the required kubernetes version
              # https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#prerequisites
              apiVersion: admissionregistration.k8s.io/v1
              kind: ValidatingWebhookConfiguration
              metadata:
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: admission-webhook
              name: ingress-nginx-admission
              webhooks:
              - name: validate.nginx.ingress.kubernetes.io
              matchPolicy: Equivalent
              rules:
              - apiGroups:
              - networking.k8s.io
              apiVersions:
              - v1beta1
              operations:
              - CREATE
              - UPDATE
              resources:
              - ingresses
              failurePolicy: Fail
              sideEffects: None
              admissionReviewVersions:
              - v1
              - v1beta1
              clientConfig:
              service:
              namespace: ingress-nginx
              name: ingress-nginx-controller-admission
              path: /networking/v1beta1/ingresses
              ---
              # Source: ingress-nginx/templates/admission-webhooks/job-patch/serviceaccount.yaml
              apiVersion: v1
              kind: ServiceAccount
              metadata:
              name: ingress-nginx-admission
              annotations:
              helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
              helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: admission-webhook
              namespace: ingress-nginx
              ---
              # Source: ingress-nginx/templates/admission-webhooks/job-patch/clusterrole.yaml
              apiVersion: rbac.authorization.k8s.io/v1
              kind: ClusterRole
              metadata:
              name: ingress-nginx-admission
              annotations:
              helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
              helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: admission-webhook
              rules:
              - apiGroups:
              - admissionregistration.k8s.io
              resources:
              - validatingwebhookconfigurations
              verbs:
              - get
              - update
              ---
              # Source: ingress-nginx/templates/admission-webhooks/job-patch/clusterrolebinding.yaml
              apiVersion: rbac.authorization.k8s.io/v1
              kind: ClusterRoleBinding
              metadata:
              name: ingress-nginx-admission
              annotations:
              helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
              helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: admission-webhook
              roleRef:
              apiGroup: rbac.authorization.k8s.io
              kind: ClusterRole
              name: ingress-nginx-admission
              subjects:
              - kind: ServiceAccount
              name: ingress-nginx-admission
              namespace: ingress-nginx
              ---
              # Source: ingress-nginx/templates/admission-webhooks/job-patch/role.yaml
              apiVersion: rbac.authorization.k8s.io/v1
              kind: Role
              metadata:
              name: ingress-nginx-admission
              annotations:
              helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
              helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: admission-webhook
              namespace: ingress-nginx
              rules:
              - apiGroups:
              - ''
              resources:
              - secrets
              verbs:
              - get
              - create
              ---
              # Source: ingress-nginx/templates/admission-webhooks/job-patch/rolebinding.yaml
              apiVersion: rbac.authorization.k8s.io/v1
              kind: RoleBinding
              metadata:
              name: ingress-nginx-admission
              annotations:
              helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
              helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: admission-webhook
              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
              ---
              # Source: ingress-nginx/templates/admission-webhooks/job-patch/job-createSecret.yaml
              apiVersion: batch/v1
              kind: Job
              metadata:
              name: ingress-nginx-admission-create
              annotations:
              helm.sh/hook: pre-install,pre-upgrade
              helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: admission-webhook
              namespace: ingress-nginx
              spec:
              template:
              metadata:
              name: ingress-nginx-admission-create
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: admission-webhook
              spec:
              containers:
              - name: create
              image: docker.io/jettech/kube-webhook-certgen:v1.5.1
              imagePullPolicy: IfNotPresent
              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
              restartPolicy: OnFailure
              serviceAccountName: ingress-nginx-admission
              securityContext:
              runAsNonRoot: true
              runAsUser: 2000
              ---
              # Source: ingress-nginx/templates/admission-webhooks/job-patch/job-patchWebhook.yaml
              apiVersion: batch/v1
              kind: Job
              metadata:
              name: ingress-nginx-admission-patch
              annotations:
              helm.sh/hook: post-install,post-upgrade
              helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: admission-webhook
              namespace: ingress-nginx
              spec:
              template:
              metadata:
              name: ingress-nginx-admission-patch
              labels:
              helm.sh/chart: ingress-nginx-3.23.0
              app.kubernetes.io/name: ingress-nginx
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/version: 0.44.0
              app.kubernetes.io/managed-by: Helm
              app.kubernetes.io/component: admission-webhook
              spec:
              containers:
              - name: patch
              image: docker.io/jettech/kube-webhook-certgen:v1.5.1
              imagePullPolicy: IfNotPresent
              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
              restartPolicy: OnFailure
              serviceAccountName: ingress-nginx-admission
              securityContext:
              runAsNonRoot: true
              runAsUser: 2000


              2,部署服务

                % kubectl create -f sample/apple.yaml
                pod/apple-app created
                service/apple-service created


                % kubectl create -f sample/banana.yaml
                pod/banana-app created
                service/banana-service created

                查看pod是运行状态

                   % kubectl get pods
                  NAME READY STATUS RESTARTS AGE
                  apple-app 1/1 Running 1 2d
                  banana-app 1/1 Running 1 2d

                  对应配置文件如下

                    kind: Pod
                    apiVersion: v1
                    metadata:
                    name: apple-app
                    labels:
                    app: apple
                    spec:
                    containers:
                    - name: apple-app
                    image: hashicorp/http-echo
                    args:
                    - "-text=apple"


                    ---


                    kind: Service
                    apiVersion: v1
                    metadata:
                    name: apple-service
                    spec:
                    selector:
                    app: apple
                    ports:
                        - port: 5678 # Default port for image

                      kind: Pod
                      apiVersion: v1
                      metadata:
                      name: banana-app
                      labels:
                      app: banana
                      spec:
                      containers:
                      - name: banana-app
                      image: hashicorp/http-echo
                      args:
                      - "-text=banana"


                      ---


                      kind: Service
                      apiVersion: v1
                      metadata:
                      name: banana-service
                      spec:
                      selector:
                      app: banana
                      ports:
                      - port: 5678 # Default port for image


                      对于mac m1 平台,上述两个镜像没法使用,需要基于arm64 平台的镜像进行编译,下一讲,详细介绍如何编译镜像

                      看到的状态应该是这样的

                         % kubectl get pod
                        NAME READY STATUS RESTARTS AGE
                        apple-app 0/1 CrashLoopBackOff 4 15m
                        banana-app 0/1 CrashLoopBackOff 3 102s


                        3,部署路由策略Ingress

                          kubectl create -f sample/ingress.yaml
                          Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
                          ingress.extensions/example-ingress created

                          虽然部署成功了,但是这里报了个warning,路由格式不兼容,这个会影响最终的使用,需要处理下:

                          将 extensions/v1beta1 替换为networking.k8s.io/v1

                          替换后语法也有所变化

                            `Ingress` and `IngressClass` resources have graduated to `networking.k8s.io/v1`. Ingress and IngressClass types in the `extensions/v1beta1` and `networking.k8s.io/v1beta1` API versions are deprecated and will no longer be served in 1.22+. Persisted objects can be accessed via the `networking.k8s.io/v1` API. Notable changes in v1 Ingress objects (v1beta1 field names are unchanged):
                            * `spec.backend` -> `spec.defaultBackend`
                            * `serviceName` -> `service.name`
                            * `servicePort` -> `service.port.name` (for string values)
                            * `servicePort` -> `service.port.number` (for numeric values)
                            * `pathType` no longer has a default value in v1; "Exact", "Prefix", or "ImplementationSpecific" must be specified
                            Other Ingress API updates:
                            * backends can now be resource or service backends
                            * `path` is no longer required to be a valid regular expression

                            修改后的路由策略如下

                              apiVersion: networking.k8s.io/v1
                              kind: Ingress
                              metadata:
                              name: example-ingress
                              namespace: default
                              annotations:
                              ingress.kubernetes.io/rewrite-target: /
                              spec:
                              rules:
                              - http:
                              paths:
                              - path: apple
                              pathType: Prefix
                              backend:
                              service:
                              name: apple-service
                              port:
                              number: 5678
                              - path: banana
                              pathType: Prefix
                              backend:
                              service:
                              name: banana-service
                              port:
                                              number: 5678

                              注意如果namespace 不写的话,值是default,只对default ns下的service生效。

                              注意,如果使用的旧版本的配置,需要删除配置,然后重启下k8s

                              测试下

                                 curl http://127.0.0.1
                                <html>
                                <head><title>404 Not Found</title></head>
                                <body>
                                <center><h1>404 Not Found</h1></center>
                                <hr><center>nginx</center>
                                </body>
                                </html>

                                404,说明nginx 已经在服务中了

                                  curl http://127.0.0.1/apple
                                  apple
                                  curl http://127.0.0.1/banana
                                  banana

                                  后端服务也work了


                                  文章转载自golang算法架构leetcode技术php,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                  评论