• K8s Ingress Controller部署指南:轻松实现服务外部访问


    🐇明明跟你说过:个人主页

    🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅

    🔖行路有良友,便是天堂🔖

    目录

    一、前言

    1、k8s简介

    2、Ingress Controller简介

    3、Ingress Controller的常见实现方案

    二、部署Ingress Controller

    1、安装前的准备工作

    2、安装Ingress Controller

    三、测试

    1、部署tomcat服务

    2、创建Ingress规则

    3、访问测试


    在上一章节中,我们解析了K8s七层代理Ingress Controller的定义与原理,本期将作为上期内容的补充,讲解如何在k8s中部署Ingress Controller。

    一、前言

    1、k8s简介

    Kubernetes单词起源于希腊语, 是“舵手”或者“领航员、飞行员”的意思。

    Kubernetes(简称K8s)的前世今生可以追溯到谷歌(Google)内部的一个项目,它起源于2003年,当时谷歌正面临着不断增长的应用程序和服务的管理挑战。这个项目最初被称为"Borg",是一个早期的容器编排系统。Borg 的成功经验成为 Kubernetes 开发的契机。

     有关k8s起源的介绍,请参考《初识K8s之前世今生、架构、组件、前景》这篇文章

    ​​​

    Kubernetes的优点包括可移植性、可伸缩性和扩展性。它使用轻型的YAML清单文件实现声明性部署方法,对于应用程序更新,无需重新构建基础结构。管理员可以计划和部署容器,根据需要扩展容器并管理其生命周期。借助Kubernetes的开放源代码API,用户可以通过首选编程语言、操作系统、库和消息传递总线来构建应用程序,还可以将现有持续集成和持续交付(CI/CD)工具集成。

    ​​

    2、Ingress Controller简介

    Ingress Controller 是 Kubernetes 中的一个控制器,用于管理和配置入站网络流量的路由规则。它与 Kubernetes 的 Ingress 资源结合使用,为集群中的服务提供外部访问。

    简单来说,Ingress Controller 负责根据定义的 Ingress 规则,将流量路由到集群中的不同服务和端口,并且可以执行负载均衡以分发流量到多个 Pod。它支持基于域名的虚拟主机路由和基于 URL 路径的路由,可以配置 HTTPS 连接和终端,同时还支持灵活的配置和自动化部署。

    Ingress Controller 的作用类似于一个反向代理,它接收外部流量并将其路由到集群内部的服务。通过 Ingress Controller,可以轻松地实现多个服务的统一入口和管理,提高了集群中服务的可访问性和可用性。

    3、Ingress Controller的常见实现方案

    1. Nginx Ingress Controller:Nginx Ingress Controller 使用 Nginx 作为反向代理服务器,负责管理和路由入站流量。它是 Kubernetes 社区中最流行的 Ingress Controller 实现之一,具有丰富的功能和灵活的配置选项。
    2. Traefik:Traefik 是一个现代的反向代理和负载均衡工具,也可以作为 Ingress Controller 在 Kubernetes 中使用。它具有自动发现服务、动态配置、自动 TLS 证书管理等特性,适用于复杂的部署场景。
    3. HAProxy Ingress:HAProxy Ingress 是一个基于 HAProxy 的 Ingress Controller 实现,它提供了灵活的配置选项和高性能的负载均衡能力。HAProxy Ingress 在性能方面表现出色,适用于高流量的生产环境。
    4. Contour:Contour 是由 Heptio(现为 VMware)开发的 Ingress Controller,基于 Envoy 代理实现。它提供了先进的负载均衡、TLS 加密、HTTP/2 支持等功能,并且易于部署和配置。
    5. Kong:Kong 是一个开源的 API 网关和微服务管理平台,可以作为 Kubernetes 的 Ingress Controller 使用。它提供了灵活的插件系统和可扩展的架构,适用于大规模和复杂的微服务架构。

    二、部署Ingress Controller

    1、安装前的准备工作

    1. 准备k8s集群,我这里已经提前搭建好了k8s集群,版本是1.23,如果还未搭建k8s集群,请参考《在Centos中搭建 K8s 1.23 集群超详细讲解》这篇文章。
    2. 准备部署Ingress Controller所需的资源镜像,我已经放在个人资源里了,大家可以按需自行去下载

    2、安装Ingress Controller

    因为我们的集群版本是1.23,所以我们使用的Ingress-NGINX版本是v1.5.1,如果大家的集群是其他版本的,可以按需下载资源

    版本资源对照列表地址:https://github.com/kubernetes/ingress-nginx

      

    将下载好的资源镜像解压到各个node节点 

    [root@node3 ~]# docker load -i nginx-ingress-controller-v1.5.1.tar.gz

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

    部署Ingress Controller

    [root@master ~]# kubectl apply -f Ingress-Controller.yaml

      

    查看Pod状态

      

     安装成功

    三、测试

    1、部署tomcat服务

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: tomcat-pod
    5. labels:
    6. app: tomcat
    7. spec:
    8. containers:
    9. - name: tomcat-container
    10. image: tomcat:latest
    11. ports:
    12. - containerPort: 8080
    13. ---
    14. apiVersion: v1
    15. kind: Service
    16. metadata:
    17. name: tomcat-service
    18. spec:
    19. selector:
    20. app: tomcat
    21. ports:
    22. - protocol: TCP
    23. port: 8080
    24. targetPort: 8080

    创建Pod

    [root@master ingress]# kubectl apply -f  test.yaml

    2、创建Ingress规则

    1. apiVersion: networking.k8s.io/v1
    2. kind: Ingress
    3. metadata:
    4. name: ingress-myapp
    5. namespace: default
    6. spec:
    7. ingressClassName: nginx
    8. rules:
    9. - host: tomcat.test.com
    10. http:
    11. paths:
    12. - backend:
    13. service:
    14. name: tomcat-service
    15. port:
    16. number: 8080
    17. path: /
    18. pathType: Prefix
    • apiVersion: networking.k8s.io/v1:指定了使用的 Kubernetes API 版本。
    • kind: Ingress:指定了资源类型为 Ingress。
    • metadata:元数据部分,用于指定 Ingress 的名称和命名空间。
    • name: ingress-myapp:指定 Ingress 的名称为 ingress-myapp。
    • namespace: default:指定 Ingress 所属的命名空间为 default。
    • spec:Ingress 规格部分,定义了路由规则和后端服务。
    • ingressClassName: nginx:指定了 Ingress 的类别为 nginx,表示使用名为 nginx 的 Ingress Controller 来处理这个 Ingress 资源。
    • rules:定义了路由规则,指定了如何将请求路由到后端服务。
    • host: tomcat.lucky.com:指定了域名,当请求的 Host 头部匹配 tomcat.lucky.com 时,将使用这条规则。
    • http:指定了 HTTP 协议的路由规则。
    • paths:定义了路径规则,指定了如何根据请求的路径来路由到后端服务。
    • -:一个路径规则条目。
    • backend:定义了后端服务。
    • service:指定了后端 Service 的名称为 tomcat。
    • name: tomcat:指定了后端 Service 的名称为 tomcat。
    • port:指定了后端 Service 的端口号为 8080。
    • number: 8080:指定了端口号为 8080。
    • path: /:指定了路径为 /,表示所有请求路径都会被匹配。
    • pathType: Prefix:指定了路径匹配的类型为前缀匹配。

    创建资源

    [root@master ingress]# kubectl  apply -f ingress.yaml

    3、访问测试

    编辑电脑上 C:\Windows\System32\drivers\etc下的hosts文件。

    添加一条 192.168.40.181 tomcat.test.com 记录

    其中 192.168.40.181是node节点的IP,tomcat.test.com是我们刚刚在ingress中定义的域名。

    查看ingress端口

      

    在浏览器输入tomcat.test.com:31224,如果能访问到tomcat,则部署成功

    💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Kubernetes的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

    🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

  • 相关阅读:
    6547网新增信息素养大赛真题及白名单考级真题
    【面试经典150题】跳跃游戏
    堆排序算法
    int和Interger区别
    0829(041天 大数据01 概论)
    转行IC第一步:应该怎么选择公司和岗位?
    阿里高工内产的 SpringBoot 实战派手册仅发布一天霸榜Github
    用于精准治疗和预防细菌感染的生物功能脂质纳米颗粒
    数据查询优化技术方案
    2、选择什么样的机器人本体
  • 原文地址:https://blog.csdn.net/weixin_53269650/article/details/138156079