当前位置:   article > 正文

【kubernetes搭建(四)】搭建Ingress_kubernetes.io/ingress.class

kubernetes.io/ingress.class

一、介绍

Ingress 的实现分为两个部分 Ingress Controller 和 Ingress。
Ingress Controller 是流量的入口,是一个实体软件, 一般是Nginx 和 Haproxy(较少使用)。
Ingress 描述具体的路由规则。
Ingress Controller 会监听 api server上的 /ingresses 资源 并实时生效。
Ingerss 描述了一个或者多个 域名的路由规则,以 ingress 资源的形式存在。
简单说: Ingress 描述路由规则, Ingress Controller 实时实现规则。

二、安装Ingress Controller(ingress-nginx)

vim ~/ingress-nginx.yaml

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

kubectl apply -f ingress-nginx.yaml

三、安装ingress

vim ~/ingress.yaml

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: sumengnan.com
  5. annotations:
  6. nginx.ingress.kubernetes.io/rewrite-target: /
  7. nginx.ingress.kubernetes.io/ssl-redirect: "true"
  8. nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
  9. nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
  10. nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
  11. nginx.ingress.kubernetes.io/proxy-body-size: "100m"
  12. kubernetes.io/ingress.class: "nginx"
  13. nginx.inaress.kubernetes.io/use-reaex: "true"
  14. spec:
  15. rules:
  16. - host: sumengnan.com
  17. http:
  18. paths:
  19. - path: /
  20. pathType: Prefix
  21. backend:
  22. service:
  23. name: tomcat-service
  24. port:
  25. number: 8080

表示:当接收的域名为sumengnan.com时,把请求转发到service的name为tomcat-service的8080端口

kubectl apply -f ingress.yaml

四、配置SSL证书

1、先获取到证书key和crt文件

2、创建tls secret

kubectl  create secret tls sumengnan.com-secret --key sumengnan.com.key --cert sumengnan.com.crt

3、修改ingress.yaml

增加tls配置

  1. spec:
  2. tls:
  3. - hosts:
  4. - "sumengnan.com"
  5. secretName: sumengnan.com-secret
  6. rules:
  7. - host: sumengnan.com
  8. http:
  9. paths:
  10. - path: /
  11. pathType: Prefix
  12. backend:
  13. service:
  14. name: tomcat-service
  15. port:
  16. number: 8080

应用:kubectl apply -f  ingress.yaml

五、通过ingress访问service(svc)组件

1、通过ingress访问grafana

(1)、创建tls secret:

kubectl  create secret tls grafana.sumengnan.com-secret --key grafana.sumengnan.com.key --cert grafana.sumengnan.com.crt -n ns-monitor

(2)、创建ingress

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. namespace: ns-monitor
  5. name: grafana.sumengnan.com
  6. annotations:
  7. nginx.ingress.kubernetes.io/ssl-redirect: "true"
  8. nginx.ingress.kubernetes.io/rewrite-target: /
  9. nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
  10. nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
  11. nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
  12. nginx.ingress.kubernetes.io/proxy-body-size: "100m"
  13. kubernetes.io/ingress.class: "nginx"
  14. nginx.inaress.kubernetes.io/use-reaex: "true"
  15. spec:
  16. tls:
  17. - hosts:
  18. - "grafana.sumengnan.com"
  19. secretName: grafana.sumengnan.com-secret
  20. rules:
  21. - host: grafana.sumengnan.com
  22. http:
  23. paths:
  24. - path: /
  25. pathType: Prefix
  26. backend:
  27. service:
  28. name: grafana-service
  29. port:
  30. number: 3000

  kubectl apply -f grafana-ingress.yml

(3)、去掉grafana.yaml文件中的nodePort: 30001(可选)

搭建grafana参考:【kubernetes搭建(三)】搭建Promethus+grafana监控平台_sumengnan的博客-CSDN博客

因为不需要外部访问集群了,所以去掉,只留下内部的3000端口即可

kubectl apply -f grafana.yaml

(4)、访问地址验证

2、通过ingress访问kubernetes-dashboard

(1)、创建tls secret:

kubectl  create secret tls kubernetes.sumengnan.com-secret --key kubernetes.sumengnan.com.key --cert kubernetes.sumengnan.com.crt -n kubernetes-dashboard 

(2)、创建ingress

kubernetes-dashboard由于后端需要https访问,所以需要增加
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/secure-backends: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. namespace: kubernetes-dashboard
  5. name: kubernetes.sumengnan.com
  6. annotations:
  7. nginx.ingress.kubernetes.io/rewrite-target: /
  8. nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
  9. nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
  10. nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
  11. nginx.ingress.kubernetes.io/proxy-body-size: "100m"
  12. kubernetes.io/ingress.class: "nginx"
  13. nginx.inaress.kubernetes.io/use-reaex: "true"
  14. #注意后端也是需要https访问的
  15. nginx.ingress.kubernetes.io/ssl-redirect: "true"
  16. nginx.ingress.kubernetes.io/secure-backends: "true"
  17. nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
  18. spec:
  19. tls:
  20. - hosts:
  21. - "kubernetes.sumengnan.com"
  22. secretName: kubernetes.sumengnan.com-secret
  23. rules:
  24. - host: kubernetes.sumengnan.com
  25. http:
  26. paths:
  27. - path: /
  28. pathType: Prefix
  29. backend:
  30. service:
  31. name: kubernetes-dashboard
  32. port:
  33. number: 8443

 kubectl apply -f kubernetes-dashboard-ingress.yml

注:如果报错failed calling webhook "validate.nginx.ingress.kubernetes.io": failed to call webhook:

 则需要执行:kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission

删除ValidatingWebhookConfiguration

(3)、去掉kubernetes-dashboard.yml文件中的nodePort: 30000(可选)

搭建kubernetes-dashboard参考:【kubernetes搭建(二)】搭建kubernetes-dashborad_sumengnan的博客-CSDN博客

通过集群内部端口访问即可,不需要通过外部端口访问

  kubectl apply -f kubernetes-dashboard.yml

 (4)、访问地址验证

3、通过ingress访问tomcat

(1)、创建deployment:

kubectl create deployment tomcat --image=tomcat --replicas=2 --port=8080

运行2个tomcat环境在8080端口

(2)、创建service(svc组件)

可以使用命令:kubectl expose deployment/tomcat --port=8080 --target-port=8080

创建svc资源:kubectl create service nodeport tomcat-service --tcp=8080:8080

也可以手动创建svc组件:(推荐)

vim ~/tomcat-service.yml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: tomcat-service
  5. labels:
  6. name: tomcat-service
  7. spec:
  8. type: NodePort
  9. ports:
  10. - port: 8080
  11. targetPort: 8080
  12. protocol: TCP
  13. selector:
  14. app: tomcat

注意:最后的selector是选择器,选择label为tomcat的pod组成一组服务

kubectl apply -f tomcat-service.yml

(3)、创建ingress

vim ~/tomcat-ingress.yml

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: sumengnan.com
  5. annotations:
  6. nginx.ingress.kubernetes.io/rewrite-target: /
  7. # 是否开启客户端证书验证
  8. #nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
  9. # 信任链
  10. #nginx.ingress.kubernetes.io/auth-tls-secret: "tls.secret"
  11. # 信任链校验层数
  12. #nginx.ingress.kubernetes.io/auth-tls-verify-depth: "1"
  13. # 是否传递证书给后端服务
  14. #nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true"
  15. #ingress.kubernetes.io/ssl-redirect: "true"
  16. nginx.ingress.kubernetes.io/ssl-redirect: "true"
  17. nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
  18. nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
  19. nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
  20. nginx.ingress.kubernetes.io/proxy-body-size: "100m"
  21. kubernetes.io/ingress.class: "nginx"
  22. nginx.inaress.kubernetes.io/use-reaex: "true"
  23. spec:
  24. tls:
  25. - hosts:
  26. - "sumengnan.com"
  27. secretName: sumengnan.com-secret
  28. rules:
  29. - host: sumengnan.com
  30. http:
  31. paths:
  32. - path: /
  33. pathType: Prefix
  34. backend:
  35. service:
  36. name: tomcat-service
  37. port:
  38. number: 8080

kubectl apply -f tomcat-ingress.yml

(4)、配置证书

kubectl create secret tls sumengnan.com-secret --key sumengnan.com.key --cert sumengnan.com.crt

(5)、访问地址验证

完毕 

六、ingress只允许在master节点上运行

当后续多节点部署后,ingress可能会分配到别的node节点,这并不是我们想的

1、给mater节点node打上一个自定义的标签

kubectl label nodes tencent-centos7.6 custem/ingress-controller-ready=true

2、修改ingress-nginx.yml文件

增加custem/ingress-controller-ready: true

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/40791
推荐阅读
相关标签
  

闽ICP备14008679号