Ingress控制器

Ingress是Service的Service,而Ingress控制器是用来创建Ingress的Pod。注意Ingress控制器本身也是Pod。Ingress控制器仅仅是K8s提供的规范,微服务最常使用的就是基于nginx实现的Ingress-nginx控制器。

安装Ingress-nginx控制器

下载这个文件:https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/baremetal/deploy.yaml
对其进行改造:
1、增加Node标签选择器
2、镜像改为国内镜像
3、nodeport的http端口设置为40001
4、nodeport的https端口设置为40002

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4. name: ingress-nginx
  5. labels:
  6. app.kubernetes.io/name: ingress-nginx
  7. app.kubernetes.io/instance: ingress-nginx
  8. ---
  9. # Source: ingress-nginx/templates/controller-serviceaccount.yaml
  10. apiVersion: v1
  11. kind: ServiceAccount
  12. metadata:
  13. labels:
  14. helm.sh/chart: ingress-nginx-3.33.0
  15. app.kubernetes.io/name: ingress-nginx
  16. app.kubernetes.io/instance: ingress-nginx
  17. app.kubernetes.io/version: 0.47.0
  18. app.kubernetes.io/managed-by: Helm
  19. app.kubernetes.io/component: controller
  20. name: ingress-nginx
  21. namespace: ingress-nginx
  22. automountServiceAccountToken: true
  23. ---
  24. # Source: ingress-nginx/templates/controller-configmap.yaml
  25. apiVersion: v1
  26. kind: ConfigMap
  27. metadata:
  28. labels:
  29. helm.sh/chart: ingress-nginx-3.33.0
  30. app.kubernetes.io/name: ingress-nginx
  31. app.kubernetes.io/instance: ingress-nginx
  32. app.kubernetes.io/version: 0.47.0
  33. app.kubernetes.io/managed-by: Helm
  34. app.kubernetes.io/component: controller
  35. name: ingress-nginx-controller
  36. namespace: ingress-nginx
  37. data:
  38. ---
  39. # Source: ingress-nginx/templates/clusterrole.yaml
  40. apiVersion: rbac.authorization.k8s.io/v1
  41. kind: ClusterRole
  42. metadata:
  43. labels:
  44. helm.sh/chart: ingress-nginx-3.33.0
  45. app.kubernetes.io/name: ingress-nginx
  46. app.kubernetes.io/instance: ingress-nginx
  47. app.kubernetes.io/version: 0.47.0
  48. app.kubernetes.io/managed-by: Helm
  49. name: ingress-nginx
  50. rules:
  51. - apiGroups:
  52. - ''
  53. resources:
  54. - configmaps
  55. - endpoints
  56. - nodes
  57. - pods
  58. - secrets
  59. verbs:
  60. - list
  61. - watch
  62. - apiGroups:
  63. - ''
  64. resources:
  65. - nodes
  66. verbs:
  67. - get
  68. - apiGroups:
  69. - ''
  70. resources:
  71. - services
  72. verbs:
  73. - get
  74. - list
  75. - watch
  76. - apiGroups:
  77. - extensions
  78. - networking.k8s.io # k8s 1.14+
  79. resources:
  80. - ingresses
  81. verbs:
  82. - get
  83. - list
  84. - watch
  85. - apiGroups:
  86. - ''
  87. resources:
  88. - events
  89. verbs:
  90. - create
  91. - patch
  92. - apiGroups:
  93. - extensions
  94. - networking.k8s.io # k8s 1.14+
  95. resources:
  96. - ingresses/status
  97. verbs:
  98. - update
  99. - apiGroups:
  100. - networking.k8s.io # k8s 1.14+
  101. resources:
  102. - ingressclasses
  103. verbs:
  104. - get
  105. - list
  106. - watch
  107. ---
  108. # Source: ingress-nginx/templates/clusterrolebinding.yaml
  109. apiVersion: rbac.authorization.k8s.io/v1
  110. kind: ClusterRoleBinding
  111. metadata:
  112. labels:
  113. helm.sh/chart: ingress-nginx-3.33.0
  114. app.kubernetes.io/name: ingress-nginx
  115. app.kubernetes.io/instance: ingress-nginx
  116. app.kubernetes.io/version: 0.47.0
  117. app.kubernetes.io/managed-by: Helm
  118. name: ingress-nginx
  119. roleRef:
  120. apiGroup: rbac.authorization.k8s.io
  121. kind: ClusterRole
  122. name: ingress-nginx
  123. subjects:
  124. - kind: ServiceAccount
  125. name: ingress-nginx
  126. namespace: ingress-nginx
  127. ---
  128. # Source: ingress-nginx/templates/controller-role.yaml
  129. apiVersion: rbac.authorization.k8s.io/v1
  130. kind: Role
  131. metadata:
  132. labels:
  133. helm.sh/chart: ingress-nginx-3.33.0
  134. app.kubernetes.io/name: ingress-nginx
  135. app.kubernetes.io/instance: ingress-nginx
  136. app.kubernetes.io/version: 0.47.0
  137. app.kubernetes.io/managed-by: Helm
  138. app.kubernetes.io/component: controller
  139. name: ingress-nginx
  140. namespace: ingress-nginx
  141. rules:
  142. - apiGroups:
  143. - ''
  144. resources:
  145. - namespaces
  146. verbs:
  147. - get
  148. - apiGroups:
  149. - ''
  150. resources:
  151. - configmaps
  152. - pods
  153. - secrets
  154. - endpoints
  155. verbs:
  156. - get
  157. - list
  158. - watch
  159. - apiGroups:
  160. - ''
  161. resources:
  162. - services
  163. verbs:
  164. - get
  165. - list
  166. - watch
  167. - apiGroups:
  168. - extensions
  169. - networking.k8s.io # k8s 1.14+
  170. resources:
  171. - ingresses
  172. verbs:
  173. - get
  174. - list
  175. - watch
  176. - apiGroups:
  177. - extensions
  178. - networking.k8s.io # k8s 1.14+
  179. resources:
  180. - ingresses/status
  181. verbs:
  182. - update
  183. - apiGroups:
  184. - networking.k8s.io # k8s 1.14+
  185. resources:
  186. - ingressclasses
  187. verbs:
  188. - get
  189. - list
  190. - watch
  191. - apiGroups:
  192. - ''
  193. resources:
  194. - configmaps
  195. resourceNames:
  196. - ingress-controller-leader-nginx
  197. verbs:
  198. - get
  199. - update
  200. - apiGroups:
  201. - ''
  202. resources:
  203. - configmaps
  204. verbs:
  205. - create
  206. - apiGroups:
  207. - ''
  208. resources:
  209. - events
  210. verbs:
  211. - create
  212. - patch
  213. ---
  214. # Source: ingress-nginx/templates/controller-rolebinding.yaml
  215. apiVersion: rbac.authorization.k8s.io/v1
  216. kind: RoleBinding
  217. metadata:
  218. labels:
  219. helm.sh/chart: ingress-nginx-3.33.0
  220. app.kubernetes.io/name: ingress-nginx
  221. app.kubernetes.io/instance: ingress-nginx
  222. app.kubernetes.io/version: 0.47.0
  223. app.kubernetes.io/managed-by: Helm
  224. app.kubernetes.io/component: controller
  225. name: ingress-nginx
  226. namespace: ingress-nginx
  227. roleRef:
  228. apiGroup: rbac.authorization.k8s.io
  229. kind: Role
  230. name: ingress-nginx
  231. subjects:
  232. - kind: ServiceAccount
  233. name: ingress-nginx
  234. namespace: ingress-nginx
  235. ---
  236. # Source: ingress-nginx/templates/controller-service-webhook.yaml
  237. apiVersion: v1
  238. kind: Service
  239. metadata:
  240. labels:
  241. helm.sh/chart: ingress-nginx-3.33.0
  242. app.kubernetes.io/name: ingress-nginx
  243. app.kubernetes.io/instance: ingress-nginx
  244. app.kubernetes.io/version: 0.47.0
  245. app.kubernetes.io/managed-by: Helm
  246. app.kubernetes.io/component: controller
  247. name: ingress-nginx-controller-admission
  248. namespace: ingress-nginx
  249. spec:
  250. type: ClusterIP
  251. ports:
  252. - name: https-webhook
  253. port: 443
  254. targetPort: webhook
  255. selector:
  256. app.kubernetes.io/name: ingress-nginx
  257. app.kubernetes.io/instance: ingress-nginx
  258. app.kubernetes.io/component: controller
  259. ---
  260. # Source: ingress-nginx/templates/controller-service.yaml
  261. apiVersion: v1
  262. kind: Service
  263. metadata:
  264. annotations:
  265. labels:
  266. helm.sh/chart: ingress-nginx-3.33.0
  267. app.kubernetes.io/name: ingress-nginx
  268. app.kubernetes.io/instance: ingress-nginx
  269. app.kubernetes.io/version: 0.47.0
  270. app.kubernetes.io/managed-by: Helm
  271. app.kubernetes.io/component: controller
  272. name: ingress-nginx-controller
  273. namespace: ingress-nginx
  274. spec:
  275. type: NodePort
  276. ports:
  277. - name: http
  278. port: 80
  279. protocol: TCP
  280. targetPort: http
  281. nodePort: 40001
  282. - name: https
  283. port: 443
  284. protocol: TCP
  285. targetPort: https
  286. nodePort: 40002
  287. selector:
  288. app.kubernetes.io/name: ingress-nginx
  289. app.kubernetes.io/instance: ingress-nginx
  290. app.kubernetes.io/component: controller
  291. ---
  292. # Source: ingress-nginx/templates/controller-deployment.yaml
  293. apiVersion: apps/v1
  294. kind: Deployment
  295. metadata:
  296. labels:
  297. helm.sh/chart: ingress-nginx-3.33.0
  298. app.kubernetes.io/name: ingress-nginx
  299. app.kubernetes.io/instance: ingress-nginx
  300. app.kubernetes.io/version: 0.47.0
  301. app.kubernetes.io/managed-by: Helm
  302. app.kubernetes.io/component: controller
  303. name: ingress-nginx-controller
  304. namespace: ingress-nginx
  305. spec:
  306. selector:
  307. matchLabels:
  308. app.kubernetes.io/name: ingress-nginx
  309. app.kubernetes.io/instance: ingress-nginx
  310. app.kubernetes.io/component: controller
  311. revisionHistoryLimit: 10
  312. minReadySeconds: 0
  313. template:
  314. metadata:
  315. labels:
  316. app.kubernetes.io/name: ingress-nginx
  317. app.kubernetes.io/instance: ingress-nginx
  318. app.kubernetes.io/component: controller
  319. spec:
  320. dnsPolicy: ClusterFirst
  321. containers:
  322. - name: controller
  323. image: k8s.gcr.io/ingress-nginx/controller:v0.46.0@sha256:52f0058bed0a17ab0fb35628ba97e8d52b5d32299fbc03cc0f6c7b9ff036b61a
  324. imagePullPolicy: IfNotPresent
  325. lifecycle:
  326. preStop:
  327. exec:
  328. command:
  329. - /wait-shutdown
  330. args:
  331. - /nginx-ingress-controller
  332. - --election-id=ingress-controller-leader
  333. - --ingress-class=nginx
  334. - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
  335. - --validating-webhook=:8443
  336. - --validating-webhook-certificate=/usr/local/certificates/cert
  337. - --validating-webhook-key=/usr/local/certificates/key
  338. securityContext:
  339. capabilities:
  340. drop:
  341. - ALL
  342. add:
  343. - NET_BIND_SERVICE
  344. runAsUser: 101
  345. allowPrivilegeEscalation: true
  346. env:
  347. - name: POD_NAME
  348. valueFrom:
  349. fieldRef:
  350. fieldPath: metadata.name
  351. - name: POD_NAMESPACE
  352. valueFrom:
  353. fieldRef:
  354. fieldPath: metadata.namespace
  355. - name: LD_PRELOAD
  356. value: /usr/local/lib/libmimalloc.so
  357. livenessProbe:
  358. failureThreshold: 5
  359. httpGet:
  360. path: /healthz
  361. port: 10254
  362. scheme: HTTP
  363. initialDelaySeconds: 10
  364. periodSeconds: 10
  365. successThreshold: 1
  366. timeoutSeconds: 1
  367. readinessProbe:
  368. failureThreshold: 3
  369. httpGet:
  370. path: /healthz
  371. port: 10254
  372. scheme: HTTP
  373. initialDelaySeconds: 10
  374. periodSeconds: 10
  375. successThreshold: 1
  376. timeoutSeconds: 1
  377. ports:
  378. - name: http
  379. containerPort: 80
  380. protocol: TCP
  381. - name: https
  382. containerPort: 443
  383. protocol: TCP
  384. - name: webhook
  385. containerPort: 8443
  386. protocol: TCP
  387. volumeMounts:
  388. - name: webhook-cert
  389. mountPath: /usr/local/certificates/
  390. readOnly: true
  391. resources:
  392. requests:
  393. cpu: 100m
  394. memory: 90Mi
  395. nodeSelector:
  396. kubernetes.io/os: linux
  397. node-role.kubernetes.io/ingress: true
  398. serviceAccountName: ingress-nginx
  399. terminationGracePeriodSeconds: 300
  400. volumes:
  401. - name: webhook-cert
  402. secret:
  403. secretName: ingress-nginx-admission
  404. ---
  405. # Source: ingress-nginx/templates/admission-webhooks/validating-webhook.yaml
  406. # before changing this value, check the required kubernetes version
  407. # https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#prerequisites
  408. apiVersion: admissionregistration.k8s.io/v1
  409. kind: ValidatingWebhookConfiguration
  410. metadata:
  411. labels:
  412. helm.sh/chart: ingress-nginx-3.33.0
  413. app.kubernetes.io/name: ingress-nginx
  414. app.kubernetes.io/instance: ingress-nginx
  415. app.kubernetes.io/version: 0.47.0
  416. app.kubernetes.io/managed-by: Helm
  417. app.kubernetes.io/component: admission-webhook
  418. name: ingress-nginx-admission
  419. webhooks:
  420. - name: validate.nginx.ingress.kubernetes.io
  421. matchPolicy: Equivalent
  422. rules:
  423. - apiGroups:
  424. - networking.k8s.io
  425. apiVersions:
  426. - v1beta1
  427. operations:
  428. - CREATE
  429. - UPDATE
  430. resources:
  431. - ingresses
  432. failurePolicy: Fail
  433. sideEffects: None
  434. admissionReviewVersions:
  435. - v1
  436. - v1beta1
  437. clientConfig:
  438. service:
  439. namespace: ingress-nginx
  440. name: ingress-nginx-controller-admission
  441. path: /networking/v1beta1/ingresses
  442. ---
  443. # Source: ingress-nginx/templates/admission-webhooks/job-patch/serviceaccount.yaml
  444. apiVersion: v1
  445. kind: ServiceAccount
  446. metadata:
  447. name: ingress-nginx-admission
  448. annotations:
  449. helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
  450. helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  451. labels:
  452. helm.sh/chart: ingress-nginx-3.33.0
  453. app.kubernetes.io/name: ingress-nginx
  454. app.kubernetes.io/instance: ingress-nginx
  455. app.kubernetes.io/version: 0.47.0
  456. app.kubernetes.io/managed-by: Helm
  457. app.kubernetes.io/component: admission-webhook
  458. namespace: ingress-nginx
  459. ---
  460. # Source: ingress-nginx/templates/admission-webhooks/job-patch/clusterrole.yaml
  461. apiVersion: rbac.authorization.k8s.io/v1
  462. kind: ClusterRole
  463. metadata:
  464. name: ingress-nginx-admission
  465. annotations:
  466. helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
  467. helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  468. labels:
  469. helm.sh/chart: ingress-nginx-3.33.0
  470. app.kubernetes.io/name: ingress-nginx
  471. app.kubernetes.io/instance: ingress-nginx
  472. app.kubernetes.io/version: 0.47.0
  473. app.kubernetes.io/managed-by: Helm
  474. app.kubernetes.io/component: admission-webhook
  475. rules:
  476. - apiGroups:
  477. - admissionregistration.k8s.io
  478. resources:
  479. - validatingwebhookconfigurations
  480. verbs:
  481. - get
  482. - update
  483. ---
  484. # Source: ingress-nginx/templates/admission-webhooks/job-patch/clusterrolebinding.yaml
  485. apiVersion: rbac.authorization.k8s.io/v1
  486. kind: ClusterRoleBinding
  487. metadata:
  488. name: ingress-nginx-admission
  489. annotations:
  490. helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
  491. helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  492. labels:
  493. helm.sh/chart: ingress-nginx-3.33.0
  494. app.kubernetes.io/name: ingress-nginx
  495. app.kubernetes.io/instance: ingress-nginx
  496. app.kubernetes.io/version: 0.47.0
  497. app.kubernetes.io/managed-by: Helm
  498. app.kubernetes.io/component: admission-webhook
  499. roleRef:
  500. apiGroup: rbac.authorization.k8s.io
  501. kind: ClusterRole
  502. name: ingress-nginx-admission
  503. subjects:
  504. - kind: ServiceAccount
  505. name: ingress-nginx-admission
  506. namespace: ingress-nginx
  507. ---
  508. # Source: ingress-nginx/templates/admission-webhooks/job-patch/role.yaml
  509. apiVersion: rbac.authorization.k8s.io/v1
  510. kind: Role
  511. metadata:
  512. name: ingress-nginx-admission
  513. annotations:
  514. helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
  515. helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  516. labels:
  517. helm.sh/chart: ingress-nginx-3.33.0
  518. app.kubernetes.io/name: ingress-nginx
  519. app.kubernetes.io/instance: ingress-nginx
  520. app.kubernetes.io/version: 0.47.0
  521. app.kubernetes.io/managed-by: Helm
  522. app.kubernetes.io/component: admission-webhook
  523. namespace: ingress-nginx
  524. rules:
  525. - apiGroups:
  526. - ''
  527. resources:
  528. - secrets
  529. verbs:
  530. - get
  531. - create
  532. ---
  533. # Source: ingress-nginx/templates/admission-webhooks/job-patch/rolebinding.yaml
  534. apiVersion: rbac.authorization.k8s.io/v1
  535. kind: RoleBinding
  536. metadata:
  537. name: ingress-nginx-admission
  538. annotations:
  539. helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
  540. helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  541. labels:
  542. helm.sh/chart: ingress-nginx-3.33.0
  543. app.kubernetes.io/name: ingress-nginx
  544. app.kubernetes.io/instance: ingress-nginx
  545. app.kubernetes.io/version: 0.47.0
  546. app.kubernetes.io/managed-by: Helm
  547. app.kubernetes.io/component: admission-webhook
  548. namespace: ingress-nginx
  549. roleRef:
  550. apiGroup: rbac.authorization.k8s.io
  551. kind: Role
  552. name: ingress-nginx-admission
  553. subjects:
  554. - kind: ServiceAccount
  555. name: ingress-nginx-admission
  556. namespace: ingress-nginx
  557. ---
  558. # Source: ingress-nginx/templates/admission-webhooks/job-patch/job-createSecret.yaml
  559. apiVersion: batch/v1
  560. kind: Job
  561. metadata:
  562. name: ingress-nginx-admission-create
  563. annotations:
  564. helm.sh/hook: pre-install,pre-upgrade
  565. helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  566. labels:
  567. helm.sh/chart: ingress-nginx-3.33.0
  568. app.kubernetes.io/name: ingress-nginx
  569. app.kubernetes.io/instance: ingress-nginx
  570. app.kubernetes.io/version: 0.47.0
  571. app.kubernetes.io/managed-by: Helm
  572. app.kubernetes.io/component: admission-webhook
  573. namespace: ingress-nginx
  574. spec:
  575. template:
  576. metadata:
  577. name: ingress-nginx-admission-create
  578. labels:
  579. helm.sh/chart: ingress-nginx-3.33.0
  580. app.kubernetes.io/name: ingress-nginx
  581. app.kubernetes.io/instance: ingress-nginx
  582. app.kubernetes.io/version: 0.47.0
  583. app.kubernetes.io/managed-by: Helm
  584. app.kubernetes.io/component: admission-webhook
  585. spec:
  586. containers:
  587. - name: create
  588. image: docker.io/jettech/kube-webhook-certgen:v1.5.1
  589. imagePullPolicy: IfNotPresent
  590. args:
  591. - create
  592. - --host=ingress-nginx-controller-admission,ingress-nginx-controller-admission.$(POD_NAMESPACE).svc
  593. - --namespace=$(POD_NAMESPACE)
  594. - --secret-name=ingress-nginx-admission
  595. env:
  596. - name: POD_NAMESPACE
  597. valueFrom:
  598. fieldRef:
  599. fieldPath: metadata.namespace
  600. restartPolicy: OnFailure
  601. serviceAccountName: ingress-nginx-admission
  602. securityContext:
  603. runAsNonRoot: true
  604. runAsUser: 2000
  605. ---
  606. # Source: ingress-nginx/templates/admission-webhooks/job-patch/job-patchWebhook.yaml
  607. apiVersion: batch/v1
  608. kind: Job
  609. metadata:
  610. name: ingress-nginx-admission-patch
  611. annotations:
  612. helm.sh/hook: post-install,post-upgrade
  613. helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  614. labels:
  615. helm.sh/chart: ingress-nginx-3.33.0
  616. app.kubernetes.io/name: ingress-nginx
  617. app.kubernetes.io/instance: ingress-nginx
  618. app.kubernetes.io/version: 0.47.0
  619. app.kubernetes.io/managed-by: Helm
  620. app.kubernetes.io/component: admission-webhook
  621. namespace: ingress-nginx
  622. spec:
  623. template:
  624. metadata:
  625. name: ingress-nginx-admission-patch
  626. labels:
  627. helm.sh/chart: ingress-nginx-3.33.0
  628. app.kubernetes.io/name: ingress-nginx
  629. app.kubernetes.io/instance: ingress-nginx
  630. app.kubernetes.io/version: 0.47.0
  631. app.kubernetes.io/managed-by: Helm
  632. app.kubernetes.io/component: admission-webhook
  633. spec:
  634. containers:
  635. - name: patch
  636. image: docker.io/jettech/kube-webhook-certgen:v1.5.1
  637. imagePullPolicy: IfNotPresent
  638. args:
  639. - patch
  640. - --webhook-name=ingress-nginx-admission
  641. - --namespace=$(POD_NAMESPACE)
  642. - --patch-mutating=false
  643. - --secret-name=ingress-nginx-admission
  644. - --patch-failure-policy=Fail
  645. env:
  646. - name: POD_NAMESPACE
  647. valueFrom:
  648. fieldRef:
  649. fieldPath: metadata.namespace
  650. restartPolicy: OnFailure
  651. serviceAccountName: ingress-nginx-admission
  652. securityContext:
  653. runAsNonRoot: true
  654. runAsUser: 2000