1. 程式人生 > 其它 >6.k8s-service

6.k8s-service

一、定義

Service的概念

kubernetes service定義了這樣一種抽象: 一個pod的邏輯分組, 一種可以訪問它們的策略--通常稱為微服務。 這一組pod能夠被service訪問到, 通常是通過Label Selector

Service 能夠提供負載均衡的能力, 但是在使用上有以下限制:

  • 只提供4層負載均衡能力, 而沒有7層功能呢, 但有時我們可能需要更多的匹配規則來轉發請求, 這點上4層負載均衡是不支援的

二、代理模式分類

Service的型別

service在k8s中有以下四種類型

  • Clusterlp:預設型別, 自動分配一個僅Cluster內部訪問的虛擬Ip

  • NodePort: 在ClusterIP基礎上為Service在每臺機器上繫結一個埠, 這樣就可以通過:NodePort來訪問該服務

  • LoadBalancer: 在NodePort的基礎上, 藉助cloud provider建立一個外部負載均衡, 並將請求轉發到:NodePort (這裡需要引入雲供應商的負載均衡)

  • ExternalName: 把叢集外部的服務引入到叢集內部來, 在叢集內部直接使用。 沒有任何型別代理被建立,這隻有kubernetes1.7或更高版本的kube-dns才支援

流程: client訪問到節點是通過iptables 轉發的,iptables 規則是通過kube-proxy寫入的 ,apiserver通過監控kube-proxy進行服務和端點資訊的發現 ,kube-proxy會通過標籤去判斷端點是否寫入到svc的端點中去 ,

VIP和Service代理

在kubernetes叢集中, 每個Node執行一個kube-proxy程序。kube-proxy負責為service實現了一種VIP(虛擬IP)的形式,而不是externalName的形式。 在kubernetesv1.0版本, 代理完全在userpace。 在kubernetes1.1版本中 , 新增了iptales代理, 但並部署預設的執行模式。 從kubernetesv1.2 起, 預設就是iptalbes代理, 在kubernetesv1.8.0-beta.0中, 添加了ipvs代理

在kubernetes1.14版本開始預設使用ipvs代理

在kubernetesv1.4版本開始預設使用ipvs代理

在kubernetesv1.9 版本, service是4層(tcp/udp over ip)的概念。 在kubernetesv1.1版本中, 新增了Ingress API(beta版), 用來表示7層(http)服務

!為何不使用round-robin DNS? 因為在客戶端進行快取,並沒有清楚快取

代理模式的分類

  1. userspace代理模式

  2. iptables代理模式

  3. ipvs代理模式

    這種模式, kube-proxy會監控kubernetes Service物件和endpoints, 呼叫netlink介面以相應地建立ipvs規則並定期kubernetes service物件和endpoints物件同步ipvs規則, 以確保ipvs狀態與期望一致 。 訪問服務時 , 流量將被重定向到其中一個後端Pod

    與iptables類似, ipvs與netfilter的hook功能, 但使用雜湊表作為底層資料結構並在核心空間中工作。 這意味著ipvs可以更快地重定向流量, 並且在同步代理規則時具有更好的效能。 此外, ipvs為負載均衡演算法提供了更多選項, 例如:

    • rr: 輪訓排程

    • lc:最小連線數

    • dh:目標雜湊

    • sh:源雜湊

    • sed:最短期望延遲

    • nq:不排隊排程

ClusterIP

clusterIP主要在每個node節點使用iptables, 將發向clusterIP對應埠的資料, 轉發到kube-proxy中, 然後kube-proxy自己內部實現有負載均衡的方法,並可以查詢到這個service下對應pod的地址和埠, 進而把資料轉發給對應的pod的地址和埠

為了實現圖上的功能, 主要需要以下幾個元件的協同工作:

  • apiserver使用者通過kubectl命令向ipaserver傳送建立service的命令, ipaserver接收到請求後將資料儲存到etcd中
  • Kube-proxy kubernetes的每個節點中都有一個叫做kube-proxy的程序, 這個程序負責感知service, pod變化, 並將變化的資訊寫入本地的iptables規則中
  • iptables使用NAT等技術將virtuallP的流量轉發值endpoint中

建立myapp-deployment.yaml檔案

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      release: stabel
  template:
    metadata:
      labels:
        app: myapp
        release: stabel
        env: test
    spec:
      containers:
      - name: myapp
        image: hub.syuee.com/library/syuee-nginx:v2
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
        readinessProbe:
          httpGet:
            port: 80
            path: /api/server
          initialDelaySeconds: 1
          periodSeconds: 2
        livenessProbe:
          httpGet:
            port: 80
            path: /
          initialDelaySeconds: 1
          periodSeconds: 3
          timeoutSeconds: 4
      initContainers:
      - name: init-myapp
        image: busybox
        command: ['sh','-c','until nslookup syuee-web-svc; do echo waiting for syuee-web-svc; sleep 2; done;']

建立Service資訊vim myapp-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: myapp
  namespace: default
spec:
  type: ClusterIP
  selector:
    app: myapp
    release: stabel
  ports:
  - name: http
    port: 80
    targetPort: 80

Headless Service

有時不需要或不想要負載均衡, 以及單獨的Service IP。 遇到這種情況, 可以通過指定Cluster IP(spec.clusterIP)的值“Node”來建立Headless Service。 這類Service 並不會分配Cluster IP, kube-proxy不會處理它們, 而且平臺也不會為它們進行負載均衡和路由

Vim myapp-headless.yaml

apiVersion: v1
kind: Service
metadata:
  name: myapp-headless
  namespace: default
spec:
  selector:
    app: myapp
  clusterIP: "None"
  ports:
  - port: 80
    targetPort: 80
檢視coreDNS的IP地址
kubectl get pod -n kube-system -o wide
需要安裝dig命令: yum install bind-utils
dig -t A myapp-headless.default.svc.cluster.local. @10.244.4.4

Node Port

nodePort的原理在於node上開了一個埠, 將向該埠的流量匯入到kube-proxy, 然後由kube-proxy進一步給對應的pod

apiVersion: v1
kind: Service
metadata:
  name: myapp-node
  namespace: default
spec:
  type: NodePort
  selector:
    app: myapp
    release: stabel
  ports:
  - name: http
    port: 80
    targetPort: 80

查詢流程

iptables -t nat -nvL
	KUBE-NODEPORTS 
	
ipvsadm -Ln

LoadBalancer

loadBalancer和nodePort其實是同一種方式。 區別在於loadBalancer和nodePort多了一步, 就是可以呼叫cloud provider去建立LB來向節點導流

ExternalName

這種型別的Service通過返回CANME和它的值, 可以將服務對映到externalName欄位的內容(例如:hub.atguigu.com)。ExternalName Service是Service的特例, 它沒有selector, 也沒有定義任何的埠和Endpoint ,相反的,對於執行在叢集外部的服務, 它通過返回該外部服務的別名這種方式來提供服務。

apiVersion: v1
kind: Service
metadata:
  name: my-service-1
  namespace: default
spec:
  type: ExternalName
  externalName: my.detabase.example.com

當查詢主機my-service.default.svc.cluster.local(SVC_NAME.NAMESPACE.svc.cluster.local)時, 叢集的DNS服務將返回一個值my.database.example.com的CNAME記錄,訪問這個服務的工作方式和其他的相同, 唯一不同的是重定向發生在DNS層, 而且不會進行代理或轉發

lngress-Niginx github 地址:http://github.com/kubernetes/ingress-nginx

ingress-Niginx官方網站:https://kubernetes.github.io/ingress-nginx/

下載映象及版本

pollyduan/ingress-nginx-controller:v0.35.0
jettech/kube-webhook-certgen:v1.2.2

上傳到自己的本地倉庫Registry

### hub.syuee.com本地倉庫IP地址
### 為映象打個tag
# docker tag pollyduan/ingress-nginx-controller:v0.35.0 hub.syuee.com/library/ingress-nginx-controller:v0.35.0
# docker tag jettech/kube-webhook-certgen:v1.2.2 hub.syuee.com/library/kube-webhook-certgen:v1.2.2
### 推送到本地倉庫
# docker push hub.syuee.com/library/ingress-nginx-controller:v0.35.0
# docker push hub.syuee.com/library/kube-webhook-certgen:v1.2.2
### 檢視映象
# docker images | grep ingress

拉取安裝yaml 檔案 這裡部署的是0.35.0

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

修改所有的image

image: k8s.gcr.io/ingress-nginx/controller:v0.35.0@sha256:fc4979d8b8443a831c9789b5155cded454cb7de737a8b727bc2ba0106d2eae8b
---> image: hub.syuee.com/library/ingress-nginx-controller:v0.35.0

image: docker.io/jettech/kube-webhook-certgen:v1.2.2
---> image: hub.syuee.com/library/kube-webhook-certgen:v1.2.2

部署Ingress-Nginx

kubectl apply -f deploy.yaml

檢視執行結果

kubectl get pods -n ingress-nginx

建立ingress 規則

編寫ingress-app.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: wwww1.syuee.com
    http:
      paths:
      -  path: /
         backend:
           serviceName: nginx-svc
           servicePort: 80

執行檔案和檢視結果

# kubectl apply -f ingress-app.yml
 
# kubectl get ingress -A

修改主機域名解析

這裡以Windows為例,在C:\Windows\System32\drivers\etc目錄下,開啟hosts檔案進行編輯,在最末一行新增:

192.168.31.74 www1.syuee.com

如遇到無法訪問

2 修改kube-proxy配置引數。追加:

--proxy-mode=ipvs --masquerade-all=true

3 如果以上均正常還是無法訪問,則檢視 ingress-nginx pod被排程到的node宿主機。

kubectl get pods  -n ingress-nginx -o wide

則hosts中dns配置中使用其中一個ingress-nginx pod的node ip 域名  
/windows/system32/drivers/etc/hosts

三、lngress

部署Ingress-Nginx

kubectl apply -f deploy.yaml

Ingress HTTP代理訪問

deployment,Service,Ingress Yaml檔案

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dm
spec:
  replicas: 2
  selector:
    matchLabels:
      name: nginx-dm
  template:
    metadata:
      labels:
        name: nginx-dm
    spec:
      containers:
        - name: nginx-dm
          image: hub.syuee.com/library/syuee-nginx:v2
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80

            
---           
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  selector:
    name: nginx-dm
    
---    
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-mynginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: www1.syuee.com
    http:
      paths:
      - path: #路徑 如/ /index
        backend:
          serviceName: nginx-svc
          servicePort: 80
                

多個域名

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-mynginx1
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: www1.syuee.com
    http:
      paths:
      - path: #路徑 如/ /index
        backend:
          serviceName: nginx-svc1
          servicePort: 80      
 ---
 apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-mynginx2
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: www2.syuee.com
    http:
      paths:
      - path: #路徑 如/ /index
        backend:
          serviceName: nginx-svc2
          servicePort: 80   

如遇到無法訪問

2 修改kube-proxy配置引數。

--proxy-mode=ipvs --masquerade-all=true

3 如果以上均正常還是無法訪問,則檢視 ingress-nginx pod被排程到的node宿主機。

kubectl get pods  -n ingress-nginx -o wide

則hosts中dns配置中使用其中一個ingress-nginx pod的node ip 域名  

/windows/system32/drivers/etc/hosts
/etc/hosts

Ingress HTTPS代理訪問

建立證書, 以及cert 儲存方式

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=NGINXSVC/o=NGINXSVC"
kubectl create secret tls tls-secret --key tls.key --cert tls.crt

Deployment,Service, Ingress Yaml檔案

apiVersion: exensions/v1beta1
kind: Ingress
metadata:
  name: nginx-test
spec:
  tls:
    - hosts:
      - foo.bar.com
      secretName: tls-secret
  rules:
    - host: foo.bar.com
      http:
        paths:
        - path: /
          backend:
            serviceName: nginx-svc
            servicePort: 80

Nginx 進行BasicAuth

安裝http伺服器這裡需要http支援
yum -y install httpd
新建目錄
mkdir basic-auth
建立認證檔案 檔名為auth 使用者名稱foo
htpasswd -c auth foo
kubectl create secret generic basic-auth --from-file=auth
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-with-auth
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - foo'
spec:
  rules:
  - host: www4.syuee.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-svc
          servicePort: 80

Nginx 進行重寫

名稱 描述
nginx-ingress.kubernetes.io/rewrite-target 必須重定向流量的目標URL
Nginx-ingress.kubernetes.io/ssl-redirect 指示位置部分是否僅可訪問SSL(當ingress包含證書時預設True) 布林
nginx.ingress.kubernetes.io/force-ssl-redirect 即便ingress未啟用TLS, 也強制重定向到HTTPS 布林
nginx.ingress.kubernetes.io/app-root 定義Controller必須重定向的應用程式根, 如果它在‘/s'上下文中
nginx.ingress.kubernetes.io/use-regex 指示ingress上定義的路徑是否使用正則表示式 布林
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-test
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: http://foo.bar.com:31795/hostname.html
spec:
  rules:
  - host: foo10.bar.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-svc
          servicePort: 80

四、endpoint

endpoint是k8s叢集中的一個資源物件,儲存在etcd中,用來記錄一個service對應的所有pod的訪問地址。service配置selector,endpoint controller才會自動建立對應的endpoint物件;否則,不會生成endpoint物件.

例如,k8s叢集中建立一個名為hello的service,就會生成一個同名的endpoint物件,ENDPOINTS就是service關聯的pod的ip地址和埠。

一個 Service 由一組 backend Pod 組成。這些 Pod 通過 endpoints 暴露出來。 Service Selector 將持續評估,結果被 POST 到一個名稱為 Service-hello 的 Endpoint 物件上。 當 Pod 終止後,它會自動從 Endpoint 中移除,新的能夠匹配上 Service Selector 的 Pod 將自動地被新增到 Endpoint 中。 檢查該 Endpoint,注意到 IP 地址與建立的 Pod 是相同的。現在,能夠從叢集中任意節點上使用 curl 命令請求 hello Service <CLUSTER-IP>:<PORT> 。 注意 Service IP 完全是虛擬的,它從來沒有走過網路,如果對它如何工作的原理感到好奇,可以閱讀更多關於 服務代理 的內容。

Endpoints是實現實際服務的端點集合。

Kubernetes在建立Service時,根據Service的標籤選擇器(Label Selector)來查詢Pod,據此建立與Service同名的EndPoints物件。當Pod的地址發生變化時,EndPoints也隨之變化。Service接收到請求時,就能通過EndPoints找到請求轉發的目標地址。

Service不僅可以代理Pod,還可以代理任意其他後端,比如執行在Kubernetes外部Mysql、Oracle等。這是通過定義兩個同名的service和endPoints來實現的。

在實際的生產環境使用中,通過分散式儲存來實現的磁碟在mysql這種IO密集性應用中,效能問題會顯得非常突出。所以在實際應用中,一般不會把mysql這種應用直接放入kubernetes中管理,而是使用專用的伺服器來獨立部署。而像web這種無狀態應用依然會執行在kubernetes當中,這個時候web伺服器要連線kubernetes管理之外的資料庫,有兩種方式:一是直接連線資料庫所在物理伺服器IP,另一種方式就是藉助kubernetes的Endpoints直接將外部伺服器對映為kubernetes內部的一個服務。

  簡單認為:動態儲存pod名字與pod ip對應關係的list,並提供將請求轉發到實際pod上的能力

[root@k8s-master ~]# pwd
/root
[root@k8s-master ~]# cat deployment-hello.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hello
spec:
  replicas: 4
  template:
    metadata:
      labels:
        run: hello
    spec:
      containers:
       - name: hello
         image: tomcat:8 #確保node節點上有該映象且可正常執行,注意是node節點機器上,不是master機器
         imagePullPolicy: IfNotPresent ##Always,IfNotPresent,Never
         ports:
         - name: http
           containerPort: 8080
[root@k8s-master ~]# cat service-hello.yaml 
apiVersion: v1
kind: Service
metadata:
  name: service-hello
  labels:
  name: service-hello
spec:
  type: NodePort      #這裡代表是NodePort型別的,另外還有ingress,LoadBalancer
  ports:
  - port: 80          #這裡的埠和clusterIP(kubectl describe service service-hello中的IP的port)對應,即在叢集中所有機器上curl 10.98.166.242:80可訪問釋出的應用服務。
    targetPort: 8080  #埠一定要和container暴露出來的埠對應,nodejs暴露出來的埠是8081,所以這裡也應是8081
    protocol: TCP
    nodePort: 31111   # 所有的節點都會開放此埠30000--32767,此埠供外部呼叫。
  selector:
    run: hello         #這裡選擇器一定要選擇容器的標籤,之前寫name:kube-node是錯的。
[root@k8s-master ~]# pwd
/root
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl create -f service-hello.yaml 
service/service-hello created

[root@k8s-master ~]# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4h24m
service-hello NodePort 10.98.166.242 <none> 80:31111/TCP 42s
[root@k8s-master ~]#

root@k8s-master ~]# kubectl get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4h25m <none>
service-hello NodePort 10.98.166.242 <none> 80:31111/TCP 104s run=hello

[root@k8s-master ~]# kubectl describe service service-hello
Name:                     service-hello
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 run=hello
Type:                     NodePort
IP:                       10.98.166.242
Port:                     <unset>  80/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  31111/TCP
Endpoints:                10.244.1.22:8080,10.244.1.23:8080,10.244.1.24:8080 + 1 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl get endpoints
NAME            ENDPOINTS                                                        AGE
kubernetes      192.168.111.130:6443                                             20h
service-hello   10.244.1.22:8080,10.244.1.23:8080,10.244.1.24:8080 + 1 more...   15h
[root@k8s-master ~]# kubectl describe endpoint service-hello
error: the server doesn't have a resource type "endpoint"
[root@k8s-master ~]# kubectl describe endpoints service-hello
Name:         service-hello
Namespace:    default
Labels:       <none>
Annotations:  endpoints.kubernetes.io/last-change-trigger-time: 2019-04-03T02:18:57Z
Subsets:
  Addresses:          10.244.1.22,10.244.1.23,10.244.1.24,10.244.1.25
  NotReadyAddresses:  <none>
  Ports:
    Name     Port  Protocol
    ----     ----  --------
    <unset>  8080  TCP

Events:
  Type     Reason                  Age                From                 Message
  ----     ------                  ----               ----                 -------
  Warning  FailedToUpdateEndpoint  48m (x2 over 69m)  endpoint-controller  Failed to update endpoint default/service-hello: Operation cannot be fulfilled on endpoints "service-hello": the object has been modified; please apply your changes to the latest version and try again
[root@k8s-master ~]#

Endpoints是指一個服務的端點,當你的服務需要訪問外部資源時,而你又不想把外部地址配置到程式碼裡,這時,你可以在k8s裡建立一個kind為Endpoints的服務,它可以幫助你的程式解析這個外部地址。

  • 宣告一個elasticsearch-1的服務,它對映到一個外部的地址192.168.11.13的9200埠
kind: Service
apiVersion: v1
metadata:
  name: elasticsearch-1
spec:
  clusterIP: None
---
kind: Endpoints
apiVersion: v1
metadata:
  name: elasticsearch-1
subsets:
  - addresses:
      - ip: 192.168.11.13
    ports:
      - port: 9200
  • 而如果你的外部服務也是一個k8s服務,這時也可以通過ExternalName型別也實現這種對映關係,比如在跨namespace訪問資源時,你就可以通過ExternalName來實現一種類似快捷方式的功能。

例如,以下 Service 定義將 prod 名稱空間中的 my-service 服務對映到 my.database.example.com

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: prod
spec:
  type: ExternalName
  externalName: my.database.example.com

說明: ExternalName 接受 IPv4 地址字串,但作為包含數字的 DNS 名稱,而不是 IP 地址。 類似於 IPv4 地址的外部名稱不能由 CoreDNS 或 ingress-nginx 解析,因為外部名稱旨在指定規範的 DNS 名稱。 要對 IP 地址進行硬編碼,請考慮使用 headless Services

並不是service暴露一個外部ip,而是service轉發外部ip+port,做法如下:

apiVersion: v1
kind: Endpoints
metadata:
  name: http
  namespace: default
subsets:
- addresses:
  - ip: 10.2.1.1
  ports:
  - name: http
    port: 8080
    protocol: TCP

其中10.2.1.1:8080是外部服務。

其次,建立service,其中名字一定要和endpoint的一致:

apiVersion: v1
kind: Service
metadata:
  name: http
  namespace: default
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80

然後訪問service自動生成的虛擬ip加port即可。

FAQ

1)ingress-controller起不來

通過kubectl describe檢視pod,有這樣一句報錯:port 80 is already in use. Please check the flag --http-port

解決方法:

通過# netstat -antp | grep 80,找到了佔用埠的應用,然後停掉就可以了。2)ingress-controller起不來

檢視官方文件有這麼一句提示

所以,在執行ingress-controller.yml後,執行以下如下命令:

kubectl wait --namespace ingress-nginx \
  --for=condition=ready pod \
  --selector=app.kubernetes.io/component=controller \
  --timeout=120s

3)瀏覽器直接輸入域名無法訪問,後臺curl時報錯:[root@node1 ~]# curl http://example.ingressdemo.com
curl: (6) Could not resolve host: ingress-nginx-controller-admission.ingress-nginx.svc; Unknown error

解決方法:

[root@node1]# kubectl get ValidatingWebhookConfiguration/ingress-nginx-admission -n ingress-nginx
NAME                      WEBHOOKS   AGE
ingress-nginx-admission   1          7d1h
[root@test ~]# kubectl edit ValidatingWebhookConfiguration/ingress-nginx-admission -n ingress-nginx
validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission edited
######下面是edit介面中的某一段
webhooks:
- admissionReviewVersions:
- v1beta1
clientConfig:
  caBundle: BDRVJUSUZJQ0FURS0tLS0LS0tLS1CRUdJTitCk1JSURUNBaEJOUUROWnBJcXR3JPRENCM3FBREFnTTJzaDg3YVVrSlpNQW9HQ0NxR1NNNDlCQU1DWUjBUQVFIL0TUFBd0lCNxR1NNNDRTVNVEl3TlRJMVdoZ1BNakV5TURBME1qVXhNakExTWpWYU1BQXdXVEZ3dOakFPQmdOVkFUQmdjcWhrak9QUUlCQmdncQpoa2pPUFFNY04KTWpBd05UQkJ3TkNBQVRDcWRWOWdVTm5yelYSs3NlBUQVBRSm9KS30Umg5NlIxYkl6R3lzQjE3UHJzc21CNDBGQjRPYU5jJHYVpaTHNtN1MR28yMGwzCdzblJva2FRcWpMOBrYW96hROEJBZjhFQkFNQ0FnUXcKRXdZRFZSMGxCQXd3Q2dZSUt3WUJCUVVIQXdFCL3pBS0JnZ3Foa2pPUFFRRApBZ05KQURCR0FpRUE4K1A1WGlyOFgzREJEK1IvN2lIVWxzNXg3TW1UdjVMN1VzQzBd0R3WURJBVXdBd0VQ0lRQ2JS1FTkQgQ0VSVSMUNpCWG50RmdDblJLRkxjUVkxeWJ6bDVwTnlyZkZnPkVOdGSUNBVEUtLS0tLQoEJ6N21CNU9KT0KLS0tLEl=
  service:
    name: ingress-nginx-controller-admission
    namespace: ingress-nginx
    path: /extensions/v1beta1/ingresses
    port: 443
failurePolicy: Fail             ################## 改成:Ignore
matchPolicy: Exact
name: validate.nginx.ingress.kubernetes.io