0


k8s部署ingress-nginx

k8s部署ingress-nginx


前言

k8s服务对外暴露有三种方式 NodePort,LoadBalancer,Ingress

Nodeport: 服务暴露需要在集群每个节点都开放一个同样的端口,通过nodtIp:nodePort来访问,如果服务数量多了,开放的端口就难以管理
LoadBalancer: 大部分情况下只适用于支持外部负载均衡器的云提供商(AWS,阿里云,华为云等)使用。每个服务都会由云服务提供一个IP作为入口,转发相应的流量,但每个LoadBlancer Service都会产生费用,成本比较高。如果想要在内网环境中使用就需要部署网络负载均衡器,比如MetalLB等组件,它主要提供两个功能:地址分配和外部通知。

  所以这次我们主要来介绍Ingress的部署和使用,Ingress可以把进入到集群内部的请求转发到集群中的一些服务上,从而可以把服务映射到集群外部。Ingress 能把集群内Service 配置成外网能够访问的 URL,流量负载均衡,提供基于域名访问的虚拟主机等

一、ingress-nginx是什么

ingress-nginx 在 kubernetes 中是一个具有七层协议(HTTP/HTTPS)的路由转发机制,通过策略以及结合具体提供转发服务的 Ingress Controller 来实现基于灵活的 ingress 策略定义的服务路由功能,ingress controller目前主要有两种:基于nginx服务的ingress controller和基于traefik的ingress controller,我们重点讲一下ingress-nginx。

  1. k8s提供的ingressgithub地址:https://github.com/kubernetes/ingress-nginx
  2. nginx提供的ingressgithub地址:https://github.com/nginxinc/kubernetes-ingress

ingress-nginx主要有两部分组成 IngressIngress-controller

Ingress: 是k8s的一种资源对象,用来描述一个路由请求的yaml文件,将Nginx的配置抽象成一个
    Ingress对象,每添加一个新的服务只需写一个新的Ingress的yaml文件即可

Ingress-controller: 将新加入的Ingress转化成Nginx的配置文件并使之生效

二、ingress-nginx 实现原理

  Ingress-nginx简单的理解就是你原来需要改Nginx配置,然后配置各种域名对应哪个Service,现在变成每添加一个server就创建一个Ingress对象(yaml文件),不再需要去改Nginx,直接 部署yam就行了。Ingress Controller通过与Kubernetes API交互,动态感知集群中Ingress规则变化,然后读取他,按照他自己模板生成一段Nginx配置,再写到ingress-nginx-controller Pod里,最后reload 一下。

ingress具体的工作原理如下:

  1. 部署一个ingress资源对象,yaml文件写明了哪个域名对应k8s集群中的哪个service。
  2. ingress contronler通过与k8s的api进行交互,动态的去感知k8s集群中ingress服务规则的变化,然后读取它再根据ingress-controller中的nginx配置模板,生成一段对应的nginx配置。
  3. 把该配置动态的写到ingress-nginx-controller的pod里,该ingress-nginx-controller的pod里面运行着一个nginx服务,控制器会把生成的nginx配置写入到nginx的配置文件中,然后reload一下,使其配置生效,以此来达到域名分配置及动态更新的效果
  4. 浏览器请求先到ingress-nginx-controller 服务,再按照定义的ingress规则,转发到k8s集群中对应的service。

三、部署ingress-nginx

  1. ingress-nginx 部署文档地址:https://kubernetes.github.io/ingress-nginx/deploy/

网站地址

  1. 获取部署文件 deploy.yaml在这里插入图片描述文档中有直接用部署的命令,但是yaml文件中有镜像因为网络的原因无法下载,所以需要先下载文件,进行替换
  1. wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml

下图的镜像修改为

  1. registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.1.0

修改前
在这里插入图片描述
修改后
在这里插入图片描述
下面两个镜像修改为

  1. registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1

修改前
在这里插入图片描述在这里插入图片描述
修改后
在这里插入图片描述
修改ingress-nginx的暴露方式。官网默认的是LoadBalancer,如果想使用需要安装MetalLB,我们先修改成为NodePort方式。

也可以直接复制下面修改好的yaml文件

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4. labels:
  5. app.kubernetes.io/instance: ingress-nginx
  6. app.kubernetes.io/name: ingress-nginx
  7. name: ingress-nginx
  8. ---
  9. apiVersion: v1
  10. automountServiceAccountToken: true
  11. kind: ServiceAccount
  12. metadata:
  13. labels:
  14. app.kubernetes.io/component: controller
  15. app.kubernetes.io/instance: ingress-nginx
  16. app.kubernetes.io/name: ingress-nginx
  17. app.kubernetes.io/part-of: ingress-nginx
  18. app.kubernetes.io/version: 1.8.2
  19. name: ingress-nginx
  20. namespace: ingress-nginx
  21. ---
  22. apiVersion: v1
  23. kind: ServiceAccount
  24. metadata:
  25. labels:
  26. app.kubernetes.io/component: admission-webhook
  27. app.kubernetes.io/instance: ingress-nginx
  28. app.kubernetes.io/name: ingress-nginx
  29. app.kubernetes.io/part-of: ingress-nginx
  30. app.kubernetes.io/version: 1.8.2
  31. name: ingress-nginx-admission
  32. namespace: ingress-nginx
  33. ---
  34. apiVersion: rbac.authorization.k8s.io/v1
  35. kind: Role
  36. metadata:
  37. labels:
  38. app.kubernetes.io/component: controller
  39. app.kubernetes.io/instance: ingress-nginx
  40. app.kubernetes.io/name: ingress-nginx
  41. app.kubernetes.io/part-of: ingress-nginx
  42. app.kubernetes.io/version: 1.8.2
  43. name: ingress-nginx
  44. namespace: ingress-nginx
  45. rules:
  46. - apiGroups:
  47. - ""
  48. resources:
  49. - namespaces
  50. verbs:
  51. - get
  52. - apiGroups:
  53. - ""
  54. resources:
  55. - configmaps
  56. - pods
  57. - secrets
  58. - endpoints
  59. verbs:
  60. - get
  61. - list
  62. - watch
  63. - apiGroups:
  64. - ""
  65. resources:
  66. - services
  67. verbs:
  68. - get
  69. - list
  70. - watch
  71. - apiGroups:
  72. - networking.k8s.io
  73. resources:
  74. - ingresses
  75. verbs:
  76. - get
  77. - list
  78. - watch
  79. - apiGroups:
  80. - networking.k8s.io
  81. resources:
  82. - ingresses/status
  83. verbs:
  84. - update
  85. - apiGroups:
  86. - networking.k8s.io
  87. resources:
  88. - ingressclasses
  89. verbs:
  90. - get
  91. - list
  92. - watch
  93. - apiGroups:
  94. - coordination.k8s.io
  95. resourceNames:
  96. - ingress-nginx-leader
  97. resources:
  98. - leases
  99. verbs:
  100. - get
  101. - update
  102. - apiGroups:
  103. - coordination.k8s.io
  104. resources:
  105. - leases
  106. verbs:
  107. - create
  108. - apiGroups:
  109. - ""
  110. resources:
  111. - events
  112. verbs:
  113. - create
  114. - patch
  115. - apiGroups:
  116. - discovery.k8s.io
  117. resources:
  118. - endpointslices
  119. verbs:
  120. - list
  121. - watch
  122. - get
  123. ---
  124. apiVersion: rbac.authorization.k8s.io/v1
  125. kind: Role
  126. metadata:
  127. labels:
  128. app.kubernetes.io/component: admission-webhook
  129. app.kubernetes.io/instance: ingress-nginx
  130. app.kubernetes.io/name: ingress-nginx
  131. app.kubernetes.io/part-of: ingress-nginx
  132. app.kubernetes.io/version: 1.8.2
  133. name: ingress-nginx-admission
  134. namespace: ingress-nginx
  135. rules:
  136. - apiGroups:
  137. - ""
  138. resources:
  139. - secrets
  140. verbs:
  141. - get
  142. - create
  143. ---
  144. apiVersion: rbac.authorization.k8s.io/v1
  145. kind: ClusterRole
  146. metadata:
  147. labels:
  148. app.kubernetes.io/instance: ingress-nginx
  149. app.kubernetes.io/name: ingress-nginx
  150. app.kubernetes.io/part-of: ingress-nginx
  151. app.kubernetes.io/version: 1.8.2
  152. name: ingress-nginx
  153. rules:
  154. - apiGroups:
  155. - ""
  156. resources:
  157. - configmaps
  158. - endpoints
  159. - nodes
  160. - pods
  161. - secrets
  162. - namespaces
  163. verbs:
  164. - list
  165. - watch
  166. - apiGroups:
  167. - coordination.k8s.io
  168. resources:
  169. - leases
  170. verbs:
  171. - list
  172. - watch
  173. - apiGroups:
  174. - ""
  175. resources:
  176. - nodes
  177. verbs:
  178. - get
  179. - apiGroups:
  180. - ""
  181. resources:
  182. - services
  183. verbs:
  184. - get
  185. - list
  186. - watch
  187. - apiGroups:
  188. - networking.k8s.io
  189. resources:
  190. - ingresses
  191. verbs:
  192. - get
  193. - list
  194. - watch
  195. - apiGroups:
  196. - ""
  197. resources:
  198. - events
  199. verbs:
  200. - create
  201. - patch
  202. - apiGroups:
  203. - networking.k8s.io
  204. resources:
  205. - ingresses/status
  206. verbs:
  207. - update
  208. - apiGroups:
  209. - networking.k8s.io
  210. resources:
  211. - ingressclasses
  212. verbs:
  213. - get
  214. - list
  215. - watch
  216. - apiGroups:
  217. - discovery.k8s.io
  218. resources:
  219. - endpointslices
  220. verbs:
  221. - list
  222. - watch
  223. - get
  224. ---
  225. apiVersion: rbac.authorization.k8s.io/v1
  226. kind: ClusterRole
  227. metadata:
  228. labels:
  229. app.kubernetes.io/component: admission-webhook
  230. app.kubernetes.io/instance: ingress-nginx
  231. app.kubernetes.io/name: ingress-nginx
  232. app.kubernetes.io/part-of: ingress-nginx
  233. app.kubernetes.io/version: 1.8.2
  234. name: ingress-nginx-admission
  235. rules:
  236. - apiGroups:
  237. - admissionregistration.k8s.io
  238. resources:
  239. - validatingwebhookconfigurations
  240. verbs:
  241. - get
  242. - update
  243. ---
  244. apiVersion: rbac.authorization.k8s.io/v1
  245. kind: RoleBinding
  246. metadata:
  247. labels:
  248. app.kubernetes.io/component: controller
  249. app.kubernetes.io/instance: ingress-nginx
  250. app.kubernetes.io/name: ingress-nginx
  251. app.kubernetes.io/part-of: ingress-nginx
  252. app.kubernetes.io/version: 1.8.2
  253. name: ingress-nginx
  254. namespace: ingress-nginx
  255. roleRef:
  256. apiGroup: rbac.authorization.k8s.io
  257. kind: Role
  258. name: ingress-nginx
  259. subjects:
  260. - kind: ServiceAccount
  261. name: ingress-nginx
  262. namespace: ingress-nginx
  263. ---
  264. apiVersion: rbac.authorization.k8s.io/v1
  265. kind: RoleBinding
  266. metadata:
  267. labels:
  268. app.kubernetes.io/component: admission-webhook
  269. app.kubernetes.io/instance: ingress-nginx
  270. app.kubernetes.io/name: ingress-nginx
  271. app.kubernetes.io/part-of: ingress-nginx
  272. app.kubernetes.io/version: 1.8.2
  273. name: ingress-nginx-admission
  274. namespace: ingress-nginx
  275. roleRef:
  276. apiGroup: rbac.authorization.k8s.io
  277. kind: Role
  278. name: ingress-nginx-admission
  279. subjects:
  280. - kind: ServiceAccount
  281. name: ingress-nginx-admission
  282. namespace: ingress-nginx
  283. ---
  284. apiVersion: rbac.authorization.k8s.io/v1
  285. kind: ClusterRoleBinding
  286. metadata:
  287. labels:
  288. app.kubernetes.io/instance: ingress-nginx
  289. app.kubernetes.io/name: ingress-nginx
  290. app.kubernetes.io/part-of: ingress-nginx
  291. app.kubernetes.io/version: 1.8.2
  292. name: ingress-nginx
  293. roleRef:
  294. apiGroup: rbac.authorization.k8s.io
  295. kind: ClusterRole
  296. name: ingress-nginx
  297. subjects:
  298. - kind: ServiceAccount
  299. name: ingress-nginx
  300. namespace: ingress-nginx
  301. ---
  302. apiVersion: rbac.authorization.k8s.io/v1
  303. kind: ClusterRoleBinding
  304. metadata:
  305. labels:
  306. app.kubernetes.io/component: admission-webhook
  307. app.kubernetes.io/instance: ingress-nginx
  308. app.kubernetes.io/name: ingress-nginx
  309. app.kubernetes.io/part-of: ingress-nginx
  310. app.kubernetes.io/version: 1.8.2
  311. name: ingress-nginx-admission
  312. roleRef:
  313. apiGroup: rbac.authorization.k8s.io
  314. kind: ClusterRole
  315. name: ingress-nginx-admission
  316. subjects:
  317. - kind: ServiceAccount
  318. name: ingress-nginx-admission
  319. namespace: ingress-nginx
  320. ---
  321. apiVersion: v1
  322. data:
  323. allow-snippet-annotations: "true"
  324. kind: ConfigMap
  325. metadata:
  326. labels:
  327. app.kubernetes.io/component: controller
  328. app.kubernetes.io/instance: ingress-nginx
  329. app.kubernetes.io/name: ingress-nginx
  330. app.kubernetes.io/part-of: ingress-nginx
  331. app.kubernetes.io/version: 1.8.2
  332. name: ingress-nginx-controller
  333. namespace: ingress-nginx
  334. ---
  335. apiVersion: v1
  336. kind: Service
  337. metadata:
  338. labels:
  339. app.kubernetes.io/component: controller
  340. app.kubernetes.io/instance: ingress-nginx
  341. app.kubernetes.io/name: ingress-nginx
  342. app.kubernetes.io/part-of: ingress-nginx
  343. app.kubernetes.io/version: 1.8.2
  344. name: ingress-nginx-controller
  345. namespace: ingress-nginx
  346. spec:
  347. externalTrafficPolicy: Local
  348. ipFamilies:
  349. - IPv4
  350. ipFamilyPolicy: SingleStack
  351. ports:
  352. - appProtocol: http
  353. name: http
  354. port: 80
  355. protocol: TCP
  356. targetPort: http
  357. - appProtocol: https
  358. name: https
  359. port: 443
  360. protocol: TCP
  361. targetPort: https
  362. selector:
  363. app.kubernetes.io/component: controller
  364. app.kubernetes.io/instance: ingress-nginx
  365. app.kubernetes.io/name: ingress-nginx
  366. type: LoadBalancer
  367. ---
  368. apiVersion: v1
  369. kind: Service
  370. metadata:
  371. labels:
  372. app.kubernetes.io/component: controller
  373. app.kubernetes.io/instance: ingress-nginx
  374. app.kubernetes.io/name: ingress-nginx
  375. app.kubernetes.io/part-of: ingress-nginx
  376. app.kubernetes.io/version: 1.8.2
  377. name: ingress-nginx-controller-admission
  378. namespace: ingress-nginx
  379. spec:
  380. ports:
  381. - appProtocol: https
  382. name: https-webhook
  383. port: 443
  384. targetPort: webhook
  385. selector:
  386. app.kubernetes.io/component: controller
  387. app.kubernetes.io/instance: ingress-nginx
  388. app.kubernetes.io/name: ingress-nginx
  389. type: ClusterIP
  390. ---
  391. apiVersion: apps/v1
  392. kind: Deployment
  393. metadata:
  394. labels:
  395. app.kubernetes.io/component: controller
  396. app.kubernetes.io/instance: ingress-nginx
  397. app.kubernetes.io/name: ingress-nginx
  398. app.kubernetes.io/part-of: ingress-nginx
  399. app.kubernetes.io/version: 1.8.2
  400. name: ingress-nginx-controller
  401. namespace: ingress-nginx
  402. spec:
  403. minReadySeconds: 0
  404. revisionHistoryLimit: 10
  405. selector:
  406. matchLabels:
  407. app.kubernetes.io/component: controller
  408. app.kubernetes.io/instance: ingress-nginx
  409. app.kubernetes.io/name: ingress-nginx
  410. strategy:
  411. rollingUpdate:
  412. maxUnavailable: 1
  413. type: RollingUpdate
  414. template:
  415. metadata:
  416. labels:
  417. app.kubernetes.io/component: controller
  418. app.kubernetes.io/instance: ingress-nginx
  419. app.kubernetes.io/name: ingress-nginx
  420. app.kubernetes.io/part-of: ingress-nginx
  421. app.kubernetes.io/version: 1.8.2
  422. spec:
  423. containers:
  424. - args:
  425. - /nginx-ingress-controller
  426. - --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
  427. - --election-id=ingress-nginx-leader
  428. - --controller-class=k8s.io/ingress-nginx
  429. - --ingress-class=nginx
  430. - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
  431. - --validating-webhook=:8443
  432. - --validating-webhook-certificate=/usr/local/certificates/cert
  433. - --validating-webhook-key=/usr/local/certificates/key
  434. env:
  435. - name: POD_NAME
  436. valueFrom:
  437. fieldRef:
  438. fieldPath: metadata.name
  439. - name: POD_NAMESPACE
  440. valueFrom:
  441. fieldRef:
  442. fieldPath: metadata.namespace
  443. - name: LD_PRELOAD
  444. value: /usr/local/lib/libmimalloc.so
  445. image: registry.k8s.io/ingress-nginx/controller:v1.8.2@sha256:74834d3d25b336b62cabeb8bf7f1d788706e2cf1cfd64022de4137ade8881ff2
  446. imagePullPolicy: IfNotPresent
  447. lifecycle:
  448. preStop:
  449. exec:
  450. command:
  451. - /wait-shutdown
  452. livenessProbe:
  453. failureThreshold: 5
  454. httpGet:
  455. path: /healthz
  456. port: 10254
  457. scheme: HTTP
  458. initialDelaySeconds: 10
  459. periodSeconds: 10
  460. successThreshold: 1
  461. timeoutSeconds: 1
  462. name: controller
  463. ports:
  464. - containerPort: 80
  465. name: http
  466. protocol: TCP
  467. - containerPort: 443
  468. name: https
  469. protocol: TCP
  470. - containerPort: 8443
  471. name: webhook
  472. protocol: TCP
  473. readinessProbe:
  474. failureThreshold: 3
  475. httpGet:
  476. path: /healthz
  477. port: 10254
  478. scheme: HTTP
  479. initialDelaySeconds: 10
  480. periodSeconds: 10
  481. successThreshold: 1
  482. timeoutSeconds: 1
  483. resources:
  484. requests:
  485. cpu: 100m
  486. memory: 90Mi
  487. securityContext:
  488. allowPrivilegeEscalation: true
  489. capabilities:
  490. add:
  491. - NET_BIND_SERVICE
  492. drop:
  493. - ALL
  494. runAsUser: 101
  495. volumeMounts:
  496. - mountPath: /usr/local/certificates/
  497. name: webhook-cert
  498. readOnly: true
  499. dnsPolicy: ClusterFirst
  500. nodeSelector:
  501. kubernetes.io/os: linux
  502. serviceAccountName: ingress-nginx
  503. terminationGracePeriodSeconds: 300
  504. volumes:
  505. - name: webhook-cert
  506. secret:
  507. secretName: ingress-nginx-admission
  508. ---
  509. apiVersion: batch/v1
  510. kind: Job
  511. metadata:
  512. labels:
  513. app.kubernetes.io/component: admission-webhook
  514. app.kubernetes.io/instance: ingress-nginx
  515. app.kubernetes.io/name: ingress-nginx
  516. app.kubernetes.io/part-of: ingress-nginx
  517. app.kubernetes.io/version: 1.8.2
  518. name: ingress-nginx-admission-create
  519. namespace: ingress-nginx
  520. spec:
  521. template:
  522. metadata:
  523. labels:
  524. app.kubernetes.io/component: admission-webhook
  525. app.kubernetes.io/instance: ingress-nginx
  526. app.kubernetes.io/name: ingress-nginx
  527. app.kubernetes.io/part-of: ingress-nginx
  528. app.kubernetes.io/version: 1.8.2
  529. name: ingress-nginx-admission-create
  530. spec:
  531. containers:
  532. - args:
  533. - create
  534. - --host=ingress-nginx-controller-admission,ingress-nginx-controller-admission.$(POD_NAMESPACE).svc
  535. - --namespace=$(POD_NAMESPACE)
  536. - --secret-name=ingress-nginx-admission
  537. env:
  538. - name: POD_NAMESPACE
  539. valueFrom:
  540. fieldRef:
  541. fieldPath: metadata.namespace
  542. image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20230407@sha256:543c40fd093964bc9ab509d3e791f9989963021f1e9e4c9c7b6700b02bfb227b
  543. imagePullPolicy: IfNotPresent
  544. name: create
  545. securityContext:
  546. allowPrivilegeEscalation: false
  547. nodeSelector:
  548. kubernetes.io/os: linux
  549. restartPolicy: OnFailure
  550. securityContext:
  551. fsGroup: 2000
  552. runAsNonRoot: true
  553. runAsUser: 2000
  554. serviceAccountName: ingress-nginx-admission
  555. ---
  556. apiVersion: batch/v1
  557. kind: Job
  558. metadata:
  559. labels:
  560. app.kubernetes.io/component: admission-webhook
  561. app.kubernetes.io/instance: ingress-nginx
  562. app.kubernetes.io/name: ingress-nginx
  563. app.kubernetes.io/part-of: ingress-nginx
  564. app.kubernetes.io/version: 1.8.2
  565. name: ingress-nginx-admission-patch
  566. namespace: ingress-nginx
  567. spec:
  568. template:
  569. metadata:
  570. labels:
  571. app.kubernetes.io/component: admission-webhook
  572. app.kubernetes.io/instance: ingress-nginx
  573. app.kubernetes.io/name: ingress-nginx
  574. app.kubernetes.io/part-of: ingress-nginx
  575. app.kubernetes.io/version: 1.8.2
  576. name: ingress-nginx-admission-patch
  577. spec:
  578. containers:
  579. - args:
  580. - patch
  581. - --webhook-name=ingress-nginx-admission
  582. - --namespace=$(POD_NAMESPACE)
  583. - --patch-mutating=false
  584. - --secret-name=ingress-nginx-admission
  585. - --patch-failure-policy=Fail
  586. env:
  587. - name: POD_NAMESPACE
  588. valueFrom:
  589. fieldRef:
  590. fieldPath: metadata.namespace
  591. image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20230407@sha256:543c40fd093964bc9ab509d3e791f9989963021f1e9e4c9c7b6700b02bfb227b
  592. imagePullPolicy: IfNotPresent
  593. name: patch
  594. securityContext:
  595. allowPrivilegeEscalation: false
  596. nodeSelector:
  597. kubernetes.io/os: linux
  598. restartPolicy: OnFailure
  599. securityContext:
  600. fsGroup: 2000
  601. runAsNonRoot: true
  602. runAsUser: 2000
  603. serviceAccountName: ingress-nginx-admission
  604. ---
  605. apiVersion: networking.k8s.io/v1
  606. kind: IngressClass
  607. metadata:
  608. labels:
  609. app.kubernetes.io/component: controller
  610. app.kubernetes.io/instance: ingress-nginx
  611. app.kubernetes.io/name: ingress-nginx
  612. app.kubernetes.io/part-of: ingress-nginx
  613. app.kubernetes.io/version: 1.8.2
  614. name: nginx
  615. spec:
  616. controller: k8s.io/ingress-nginx
  617. ---
  618. apiVersion: admissionregistration.k8s.io/v1
  619. kind: ValidatingWebhookConfiguration
  620. metadata:
  621. labels:
  622. app.kubernetes.io/component: admission-webhook
  623. app.kubernetes.io/instance: ingress-nginx
  624. app.kubernetes.io/name: ingress-nginx
  625. app.kubernetes.io/part-of: ingress-nginx
  626. app.kubernetes.io/version: 1.8.2
  627. name: ingress-nginx-admission
  628. webhooks:
  629. - admissionReviewVersions:
  630. - v1
  631. clientConfig:
  632. service:
  633. name: ingress-nginx-controller-admission
  634. namespace: ingress-nginx
  635. path: /networking/v1/ingresses
  636. failurePolicy: Fail
  637. matchPolicy: Equivalent
  638. name: validate.nginx.ingress.kubernetes.io
  639. rules:
  640. - apiGroups:
  641. - networking.k8s.io
  642. apiVersions:
  643. - v1
  644. operations:
  645. - CREATE
  646. - UPDATE
  647. resources:
  648. - ingresses
  649. sideEffects: None
  650. [root@k8s-master 1.9]# vim deploy.yaml [root@k8s-master 1.9]# cd ..[root@k8s-master ingress-nginx]# vim deploy.yaml [root@k8s-master ingress-nginx]# vim deploy.yaml [root@k8s-master ingress-nginx]# cat deploy.yaml
  651. apiVersion: v1
  652. kind: Namespace
  653. metadata:
  654. labels:
  655. app.kubernetes.io/instance: ingress-nginx
  656. app.kubernetes.io/name: ingress-nginx
  657. name: ingress-nginx
  658. ---
  659. apiVersion: v1
  660. automountServiceAccountToken: true
  661. kind: ServiceAccount
  662. metadata:
  663. labels:
  664. app.kubernetes.io/component: controller
  665. app.kubernetes.io/instance: ingress-nginx
  666. app.kubernetes.io/name: ingress-nginx
  667. app.kubernetes.io/part-of: ingress-nginx
  668. app.kubernetes.io/version: 1.8.2
  669. name: ingress-nginx
  670. namespace: ingress-nginx
  671. ---
  672. apiVersion: v1
  673. kind: ServiceAccount
  674. metadata:
  675. labels:
  676. app.kubernetes.io/component: admission-webhook
  677. app.kubernetes.io/instance: ingress-nginx
  678. app.kubernetes.io/name: ingress-nginx
  679. app.kubernetes.io/part-of: ingress-nginx
  680. app.kubernetes.io/version: 1.8.2
  681. name: ingress-nginx-admission
  682. namespace: ingress-nginx
  683. ---
  684. apiVersion: rbac.authorization.k8s.io/v1
  685. kind: Role
  686. metadata:
  687. labels:
  688. app.kubernetes.io/component: controller
  689. app.kubernetes.io/instance: ingress-nginx
  690. app.kubernetes.io/name: ingress-nginx
  691. app.kubernetes.io/part-of: ingress-nginx
  692. app.kubernetes.io/version: 1.8.2
  693. name: ingress-nginx
  694. namespace: ingress-nginx
  695. rules:
  696. - apiGroups:
  697. - ""
  698. resources:
  699. - namespaces
  700. verbs:
  701. - get
  702. - apiGroups:
  703. - ""
  704. resources:
  705. - configmaps
  706. - pods
  707. - secrets
  708. - endpoints
  709. verbs:
  710. - get
  711. - list
  712. - watch
  713. - apiGroups:
  714. - ""
  715. resources:
  716. - services
  717. verbs:
  718. - get
  719. - list
  720. - watch
  721. - apiGroups:
  722. - networking.k8s.io
  723. resources:
  724. - ingresses
  725. verbs:
  726. - get
  727. - list
  728. - watch
  729. - apiGroups:
  730. - networking.k8s.io
  731. resources:
  732. - ingresses/status
  733. verbs:
  734. - update
  735. - apiGroups:
  736. - networking.k8s.io
  737. resources:
  738. - ingressclasses
  739. verbs:
  740. - get
  741. - list
  742. - watch
  743. - apiGroups:
  744. - coordination.k8s.io
  745. resourceNames:
  746. - ingress-nginx-leader
  747. resources:
  748. - leases
  749. verbs:
  750. - get
  751. - update
  752. - apiGroups:
  753. - coordination.k8s.io
  754. resources:
  755. - leases
  756. verbs:
  757. - create
  758. - apiGroups:
  759. - ""
  760. resources:
  761. - events
  762. verbs:
  763. - create
  764. - patch
  765. - apiGroups:
  766. - discovery.k8s.io
  767. resources:
  768. - endpointslices
  769. verbs:
  770. - list
  771. - watch
  772. - get
  773. ---
  774. apiVersion: rbac.authorization.k8s.io/v1
  775. kind: Role
  776. metadata:
  777. labels:
  778. app.kubernetes.io/component: admission-webhook
  779. app.kubernetes.io/instance: ingress-nginx
  780. app.kubernetes.io/name: ingress-nginx
  781. app.kubernetes.io/part-of: ingress-nginx
  782. app.kubernetes.io/version: 1.8.2
  783. name: ingress-nginx-admission
  784. namespace: ingress-nginx
  785. rules:
  786. - apiGroups:
  787. - ""
  788. resources:
  789. - secrets
  790. verbs:
  791. - get
  792. - create
  793. ---
  794. apiVersion: rbac.authorization.k8s.io/v1
  795. kind: ClusterRole
  796. metadata:
  797. labels:
  798. app.kubernetes.io/instance: ingress-nginx
  799. app.kubernetes.io/name: ingress-nginx
  800. app.kubernetes.io/part-of: ingress-nginx
  801. app.kubernetes.io/version: 1.8.2
  802. name: ingress-nginx
  803. rules:
  804. - apiGroups:
  805. - ""
  806. resources:
  807. - configmaps
  808. - endpoints
  809. - nodes
  810. - pods
  811. - secrets
  812. - namespaces
  813. verbs:
  814. - list
  815. - watch
  816. - apiGroups:
  817. - coordination.k8s.io
  818. resources:
  819. - leases
  820. verbs:
  821. - list
  822. - watch
  823. - apiGroups:
  824. - ""
  825. resources:
  826. - nodes
  827. verbs:
  828. - get
  829. - apiGroups:
  830. - ""
  831. resources:
  832. - services
  833. verbs:
  834. - get
  835. - list
  836. - watch
  837. - apiGroups:
  838. - networking.k8s.io
  839. resources:
  840. - ingresses
  841. verbs:
  842. - get
  843. - list
  844. - watch
  845. - apiGroups:
  846. - ""
  847. resources:
  848. - events
  849. verbs:
  850. - create
  851. - patch
  852. - apiGroups:
  853. - networking.k8s.io
  854. resources:
  855. - ingresses/status
  856. verbs:
  857. - update
  858. - apiGroups:
  859. - networking.k8s.io
  860. resources:
  861. - ingressclasses
  862. verbs:
  863. - get
  864. - list
  865. - watch
  866. - apiGroups:
  867. - discovery.k8s.io
  868. resources:
  869. - endpointslices
  870. verbs:
  871. - list
  872. - watch
  873. - get
  874. ---
  875. apiVersion: rbac.authorization.k8s.io/v1
  876. kind: ClusterRole
  877. metadata:
  878. labels:
  879. app.kubernetes.io/component: admission-webhook
  880. app.kubernetes.io/instance: ingress-nginx
  881. app.kubernetes.io/name: ingress-nginx
  882. app.kubernetes.io/part-of: ingress-nginx
  883. app.kubernetes.io/version: 1.8.2
  884. name: ingress-nginx-admission
  885. rules:
  886. - apiGroups:
  887. - admissionregistration.k8s.io
  888. resources:
  889. - validatingwebhookconfigurations
  890. verbs:
  891. - get
  892. - update
  893. ---
  894. apiVersion: rbac.authorization.k8s.io/v1
  895. kind: RoleBinding
  896. metadata:
  897. labels:
  898. app.kubernetes.io/component: controller
  899. app.kubernetes.io/instance: ingress-nginx
  900. app.kubernetes.io/name: ingress-nginx
  901. app.kubernetes.io/part-of: ingress-nginx
  902. app.kubernetes.io/version: 1.8.2
  903. name: ingress-nginx
  904. namespace: ingress-nginx
  905. roleRef:
  906. apiGroup: rbac.authorization.k8s.io
  907. kind: Role
  908. name: ingress-nginx
  909. subjects:
  910. - kind: ServiceAccount
  911. name: ingress-nginx
  912. namespace: ingress-nginx
  913. ---
  914. apiVersion: rbac.authorization.k8s.io/v1
  915. kind: RoleBinding
  916. metadata:
  917. labels:
  918. app.kubernetes.io/component: admission-webhook
  919. app.kubernetes.io/instance: ingress-nginx
  920. app.kubernetes.io/name: ingress-nginx
  921. app.kubernetes.io/part-of: ingress-nginx
  922. app.kubernetes.io/version: 1.8.2
  923. name: ingress-nginx-admission
  924. namespace: ingress-nginx
  925. roleRef:
  926. apiGroup: rbac.authorization.k8s.io
  927. kind: Role
  928. name: ingress-nginx-admission
  929. subjects:
  930. - kind: ServiceAccount
  931. name: ingress-nginx-admission
  932. namespace: ingress-nginx
  933. ---
  934. apiVersion: rbac.authorization.k8s.io/v1
  935. kind: ClusterRoleBinding
  936. metadata:
  937. labels:
  938. app.kubernetes.io/instance: ingress-nginx
  939. app.kubernetes.io/name: ingress-nginx
  940. app.kubernetes.io/part-of: ingress-nginx
  941. app.kubernetes.io/version: 1.8.2
  942. name: ingress-nginx
  943. roleRef:
  944. apiGroup: rbac.authorization.k8s.io
  945. kind: ClusterRole
  946. name: ingress-nginx
  947. subjects:
  948. - kind: ServiceAccount
  949. name: ingress-nginx
  950. namespace: ingress-nginx
  951. ---
  952. apiVersion: rbac.authorization.k8s.io/v1
  953. kind: ClusterRoleBinding
  954. metadata:
  955. labels:
  956. app.kubernetes.io/component: admission-webhook
  957. app.kubernetes.io/instance: ingress-nginx
  958. app.kubernetes.io/name: ingress-nginx
  959. app.kubernetes.io/part-of: ingress-nginx
  960. app.kubernetes.io/version: 1.8.2
  961. name: ingress-nginx-admission
  962. roleRef:
  963. apiGroup: rbac.authorization.k8s.io
  964. kind: ClusterRole
  965. name: ingress-nginx-admission
  966. subjects:
  967. - kind: ServiceAccount
  968. name: ingress-nginx-admission
  969. namespace: ingress-nginx
  970. ---
  971. apiVersion: v1
  972. data:
  973. allow-snippet-annotations: "true"
  974. kind: ConfigMap
  975. metadata:
  976. labels:
  977. app.kubernetes.io/component: controller
  978. app.kubernetes.io/instance: ingress-nginx
  979. app.kubernetes.io/name: ingress-nginx
  980. app.kubernetes.io/part-of: ingress-nginx
  981. app.kubernetes.io/version: 1.8.2
  982. name: ingress-nginx-controller
  983. namespace: ingress-nginx
  984. ---
  985. apiVersion: v1
  986. kind: Service
  987. metadata:
  988. labels:
  989. app.kubernetes.io/component: controller
  990. app.kubernetes.io/instance: ingress-nginx
  991. app.kubernetes.io/name: ingress-nginx
  992. app.kubernetes.io/part-of: ingress-nginx
  993. app.kubernetes.io/version: 1.8.2
  994. name: ingress-nginx-controller
  995. namespace: ingress-nginx
  996. spec:
  997. externalTrafficPolicy: Local
  998. ipFamilies:
  999. - IPv4
  1000. ipFamilyPolicy: SingleStack
  1001. ports:
  1002. - appProtocol: http
  1003. name: http
  1004. port: 80
  1005. protocol: TCP
  1006. targetPort: http
  1007. - appProtocol: https
  1008. name: https
  1009. port: 443
  1010. protocol: TCP
  1011. targetPort: https
  1012. selector:
  1013. app.kubernetes.io/component: controller
  1014. app.kubernetes.io/instance: ingress-nginx
  1015. app.kubernetes.io/name: ingress-nginx
  1016. type: NodePort
  1017. ---
  1018. apiVersion: v1
  1019. kind: Service
  1020. metadata:
  1021. labels:
  1022. app.kubernetes.io/component: controller
  1023. app.kubernetes.io/instance: ingress-nginx
  1024. app.kubernetes.io/name: ingress-nginx
  1025. app.kubernetes.io/part-of: ingress-nginx
  1026. app.kubernetes.io/version: 1.8.2
  1027. name: ingress-nginx-controller-admission
  1028. namespace: ingress-nginx
  1029. spec:
  1030. ports:
  1031. - appProtocol: https
  1032. name: https-webhook
  1033. port: 443
  1034. targetPort: webhook
  1035. selector:
  1036. app.kubernetes.io/component: controller
  1037. app.kubernetes.io/instance: ingress-nginx
  1038. app.kubernetes.io/name: ingress-nginx
  1039. type: ClusterIP
  1040. ---
  1041. apiVersion: apps/v1
  1042. kind: Deployment
  1043. metadata:
  1044. labels:
  1045. app.kubernetes.io/component: controller
  1046. app.kubernetes.io/instance: ingress-nginx
  1047. app.kubernetes.io/name: ingress-nginx
  1048. app.kubernetes.io/part-of: ingress-nginx
  1049. app.kubernetes.io/version: 1.8.2
  1050. name: ingress-nginx-controller
  1051. namespace: ingress-nginx
  1052. spec:
  1053. minReadySeconds: 0
  1054. revisionHistoryLimit: 10
  1055. selector:
  1056. matchLabels:
  1057. app.kubernetes.io/component: controller
  1058. app.kubernetes.io/instance: ingress-nginx
  1059. app.kubernetes.io/name: ingress-nginx
  1060. strategy:
  1061. rollingUpdate:
  1062. maxUnavailable: 1
  1063. type: RollingUpdate
  1064. template:
  1065. metadata:
  1066. labels:
  1067. app.kubernetes.io/component: controller
  1068. app.kubernetes.io/instance: ingress-nginx
  1069. app.kubernetes.io/name: ingress-nginx
  1070. app.kubernetes.io/part-of: ingress-nginx
  1071. app.kubernetes.io/version: 1.8.2
  1072. spec:
  1073. containers:
  1074. - args:
  1075. - /nginx-ingress-controller
  1076. - --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
  1077. - --election-id=ingress-nginx-leader
  1078. - --controller-class=k8s.io/ingress-nginx
  1079. - --ingress-class=nginx
  1080. - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
  1081. - --validating-webhook=:8443
  1082. - --validating-webhook-certificate=/usr/local/certificates/cert
  1083. - --validating-webhook-key=/usr/local/certificates/key
  1084. env:
  1085. - name: POD_NAME
  1086. valueFrom:
  1087. fieldRef:
  1088. fieldPath: metadata.name
  1089. - name: POD_NAMESPACE
  1090. valueFrom:
  1091. fieldRef:
  1092. fieldPath: metadata.namespace
  1093. - name: LD_PRELOAD
  1094. value: /usr/local/lib/libmimalloc.so
  1095. image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.1.0
  1096. imagePullPolicy: IfNotPresent
  1097. lifecycle:
  1098. preStop:
  1099. exec:
  1100. command:
  1101. - /wait-shutdown
  1102. livenessProbe:
  1103. failureThreshold: 5
  1104. httpGet:
  1105. path: /healthz
  1106. port: 10254
  1107. scheme: HTTP
  1108. initialDelaySeconds: 10
  1109. periodSeconds: 10
  1110. successThreshold: 1
  1111. timeoutSeconds: 1
  1112. name: controller
  1113. ports:
  1114. - containerPort: 80
  1115. name: http
  1116. protocol: TCP
  1117. - containerPort: 443
  1118. name: https
  1119. protocol: TCP
  1120. - containerPort: 8443
  1121. name: webhook
  1122. protocol: TCP
  1123. readinessProbe:
  1124. failureThreshold: 3
  1125. httpGet:
  1126. path: /healthz
  1127. port: 10254
  1128. scheme: HTTP
  1129. initialDelaySeconds: 10
  1130. periodSeconds: 10
  1131. successThreshold: 1
  1132. timeoutSeconds: 1
  1133. resources:
  1134. requests:
  1135. cpu: 100m
  1136. memory: 90Mi
  1137. securityContext:
  1138. allowPrivilegeEscalation: true
  1139. capabilities:
  1140. add:
  1141. - NET_BIND_SERVICE
  1142. drop:
  1143. - ALL
  1144. runAsUser: 101
  1145. volumeMounts:
  1146. - mountPath: /usr/local/certificates/
  1147. name: webhook-cert
  1148. readOnly: true
  1149. dnsPolicy: ClusterFirst
  1150. nodeSelector:
  1151. kubernetes.io/os: linux
  1152. serviceAccountName: ingress-nginx
  1153. terminationGracePeriodSeconds: 300
  1154. volumes:
  1155. - name: webhook-cert
  1156. secret:
  1157. secretName: ingress-nginx-admission
  1158. ---
  1159. apiVersion: batch/v1
  1160. kind: Job
  1161. metadata:
  1162. labels:
  1163. app.kubernetes.io/component: admission-webhook
  1164. app.kubernetes.io/instance: ingress-nginx
  1165. app.kubernetes.io/name: ingress-nginx
  1166. app.kubernetes.io/part-of: ingress-nginx
  1167. app.kubernetes.io/version: 1.8.2
  1168. name: ingress-nginx-admission-create
  1169. namespace: ingress-nginx
  1170. spec:
  1171. template:
  1172. metadata:
  1173. labels:
  1174. app.kubernetes.io/component: admission-webhook
  1175. app.kubernetes.io/instance: ingress-nginx
  1176. app.kubernetes.io/name: ingress-nginx
  1177. app.kubernetes.io/part-of: ingress-nginx
  1178. app.kubernetes.io/version: 1.8.2
  1179. name: ingress-nginx-admission-create
  1180. spec:
  1181. containers:
  1182. - args:
  1183. - create
  1184. - --host=ingress-nginx-controller-admission,ingress-nginx-controller-admission.$(POD_NAMESPACE).svc
  1185. - --namespace=$(POD_NAMESPACE)
  1186. - --secret-name=ingress-nginx-admission
  1187. env:
  1188. - name: POD_NAMESPACE
  1189. valueFrom:
  1190. fieldRef:
  1191. fieldPath: metadata.namespace
  1192. image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1
  1193. imagePullPolicy: IfNotPresent
  1194. name: create
  1195. securityContext:
  1196. allowPrivilegeEscalation: false
  1197. nodeSelector:
  1198. kubernetes.io/os: linux
  1199. restartPolicy: OnFailure
  1200. securityContext:
  1201. fsGroup: 2000
  1202. runAsNonRoot: true
  1203. runAsUser: 2000
  1204. serviceAccountName: ingress-nginx-admission
  1205. ---
  1206. apiVersion: batch/v1
  1207. kind: Job
  1208. metadata:
  1209. labels:
  1210. app.kubernetes.io/component: admission-webhook
  1211. app.kubernetes.io/instance: ingress-nginx
  1212. app.kubernetes.io/name: ingress-nginx
  1213. app.kubernetes.io/part-of: ingress-nginx
  1214. app.kubernetes.io/version: 1.8.2
  1215. name: ingress-nginx-admission-patch
  1216. namespace: ingress-nginx
  1217. spec:
  1218. template:
  1219. metadata:
  1220. labels:
  1221. app.kubernetes.io/component: admission-webhook
  1222. app.kubernetes.io/instance: ingress-nginx
  1223. app.kubernetes.io/name: ingress-nginx
  1224. app.kubernetes.io/part-of: ingress-nginx
  1225. app.kubernetes.io/version: 1.8.2
  1226. name: ingress-nginx-admission-patch
  1227. spec:
  1228. containers:
  1229. - args:
  1230. - patch
  1231. - --webhook-name=ingress-nginx-admission
  1232. - --namespace=$(POD_NAMESPACE)
  1233. - --patch-mutating=false
  1234. - --secret-name=ingress-nginx-admission
  1235. - --patch-failure-policy=Fail
  1236. env:
  1237. - name: POD_NAMESPACE
  1238. valueFrom:
  1239. fieldRef:
  1240. fieldPath: metadata.namespace
  1241. image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1
  1242. imagePullPolicy: IfNotPresent
  1243. name: patch
  1244. securityContext:
  1245. allowPrivilegeEscalation: false
  1246. nodeSelector:
  1247. kubernetes.io/os: linux
  1248. restartPolicy: OnFailure
  1249. securityContext:
  1250. fsGroup: 2000
  1251. runAsNonRoot: true
  1252. runAsUser: 2000
  1253. serviceAccountName: ingress-nginx-admission
  1254. ---
  1255. apiVersion: networking.k8s.io/v1
  1256. kind: IngressClass
  1257. metadata:
  1258. labels:
  1259. app.kubernetes.io/component: controller
  1260. app.kubernetes.io/instance: ingress-nginx
  1261. app.kubernetes.io/name: ingress-nginx
  1262. app.kubernetes.io/part-of: ingress-nginx
  1263. app.kubernetes.io/version: 1.8.2
  1264. name: nginx
  1265. spec:
  1266. controller: k8s.io/ingress-nginx
  1267. ---
  1268. apiVersion: admissionregistration.k8s.io/v1
  1269. kind: ValidatingWebhookConfiguration
  1270. metadata:
  1271. labels:
  1272. app.kubernetes.io/component: admission-webhook
  1273. app.kubernetes.io/instance: ingress-nginx
  1274. app.kubernetes.io/name: ingress-nginx
  1275. app.kubernetes.io/part-of: ingress-nginx
  1276. app.kubernetes.io/version: 1.8.2
  1277. name: ingress-nginx-admission
  1278. webhooks:
  1279. - admissionReviewVersions:
  1280. - v1
  1281. clientConfig:
  1282. service:
  1283. name: ingress-nginx-controller-admission
  1284. namespace: ingress-nginx
  1285. path: /networking/v1/ingresses
  1286. failurePolicy: Fail
  1287. matchPolicy: Equivalent
  1288. name: validate.nginx.ingress.kubernetes.io
  1289. rules:
  1290. - apiGroups:
  1291. - networking.k8s.io
  1292. apiVersions:
  1293. - v1
  1294. operations:
  1295. - CREATE
  1296. - UPDATE
  1297. resources:
  1298. - ingresses
  1299. sideEffects: None
  1. 部署ingress-nginx
  1. kubectl apply -f deploy.yaml
  1. 检查是否部署成功
  1. kubectl get all -n ingress-nginx

在这里插入图片描述

四、编写使用Ingress样例代码

  1. 准备后端springboot项目yaml文件
  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: demo
  5. namespace: test
  6. spec:
  7. selector:
  8. app: demo
  9. ports:
  10. - port: 8080
  11. targetPort: 8080
  12. type: ClusterIP
  13. ---
  14. apiVersion: apps/v1
  15. kind: Deployment
  16. metadata:
  17. name: demo
  18. namespace: test
  19. labels:
  20. app: demo
  21. spec:
  22. replicas: 1
  23. template:
  24. metadata:
  25. name: demo
  26. labels:
  27. app: demo
  28. spec:
  29. containers:
  30. - name: demo
  31. image: ingress-demo:1.0
  32. imagePullPolicy: IfNotPresent
  33. ports:
  34. - containerPort: 8080
  35. restartPolicy: Always
  36. selector:
  37. matchLabels:
  38. app: demo

其中的镜像是自己写的java项目demo,这个需要自己准备了, 我就不提供了

部署后端代码

  1. kubectl apply -f demo.yaml
  1. 准备Ingress资源对象yaml文件
  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. namespace: test
  5. name: demo-ingress
  6. spec:
  7. ingressClassName: nginx
  8. rules:
  9. - host: test.cisco.com
  10. http:
  11. paths:
  12. - path: /demo
  13. pathType: Prefix
  14. backend:
  15. service:
  16. name: demo
  17. port:
  18. number: 8080

部署ingress

  1. kubectl apply -f demo-ingress.yaml
  1. 修改本地hosts 配置域名 test.cisco.com在这里插入图片描述
  2. 浏览器访问后端方法在这里插入图片描述 成功访问到了后端接口。

注意:千万不要开代理,不然访问不到,本人就是因为开了clash的原因,导致一直访问不到,开始怀疑人生了。

总结

以上就是ingress的介绍,部署和实际使用样例,如有不足之处,还请各位大佬纠正。

标签: kubernetes nginx 容器

本文转载自: https://blog.csdn.net/qq_40208428/article/details/133947090
版权归原作者 Harrison-Han 所有, 如有侵权,请联系我们删除。

“k8s部署ingress-nginx”的评论:

还没有评论