• Kubernetes部署kubernates Nginx Ingress Controller


    目录

    1. 系统环境

    2. 部署Nginx Ingress Controller

    3. 部署MySQL服务

    4.部署测试服务程序

      部署测试程序,端口为9277:

      kubectl apply -f 9927.yaml

      部署测试程序,端口为9299:

      kubectl apply -f 9929.yaml   

    5.部署转发规则

      查看部署的转发规则

    6.验证效果

      访问端口9277服务

      访问端口9299服务

    1. 系统环境

    Kubernetes版本为v1.21.5

    Nginx Ingress Controller为v1.2.1

    部署主机:10.10.10.99

    2. 部署Nginx Ingress Controller

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

    3. 部署MySQL服务

          kubectl apply -f mysql.yaml

          navicat远程连接10.10.10.99:31520  用户名:root  密码:123456

          创建数据库demo,字符集:utf8mb4,排序规则:utf8mb4_general_ci

    1. apiVersion: v1
    2. kind: Service
    3. metadata:
    4. namespace: default
    5. name: mysql
    6. spec:
    7. selector:
    8. app: mysql
    9. type: NodePort
    10. ports:
    11. - protocol: TCP
    12. port: 3306
    13. targetPort: 3306
    14. nodePort: 31520
    15. name: http
    16. ---
    17. apiVersion: apps/v1
    18. kind: Deployment
    19. metadata:
    20. namespace: default
    21. name: mysql
    22. spec:
    23. selector:
    24. matchLabels:
    25. app: mysql
    26. replicas: 1
    27. strategy:
    28. type: Recreate
    29. template:
    30. metadata:
    31. labels:
    32. app: mysql
    33. spec:
    34. containers:
    35. - name: mysql
    36. image: mysql:5.7
    37. imagePullPolicy: Always
    38. args:
    39. - --character-set-server=utf8mb4
    40. - --collation-server=utf8mb4_unicode_ci
    41. ports:
    42. - containerPort: 3306
    43. protocol: TCP
    44. name: mysql
    45. env:
    46. - name: MYSQL_ROOT_PASSWORD
    47. value: '123456'

    4.部署测试服务程序

        针对不同的端口9277和9299部署两个springboot的例子程序,里面的内容是一致的

       部署成功后,容器控制台打印Controller的实际请求路径。

       部署测试程序,端口为9277:

       

      kubectl apply -f 9927.yaml

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: demo9277
    5. namespace: default
    6. labels:
    7. app: demo9277
    8. version: stable
    9. spec:
    10. replicas: 1
    11. revisionHistoryLimit: 3
    12. selector:
    13. matchLabels:
    14. app: demo9277
    15. version: stable
    16. strategy:
    17. rollingUpdate:
    18. maxSurge: 30%
    19. maxUnavailable: 30%
    20. type: RollingUpdate
    21. template:
    22. metadata:
    23. annotations:
    24. sidecar.istio.io/inject: "false"
    25. labels:
    26. app: demo9277
    27. version: stable
    28. spec:
    29. containers:
    30. - name: demo9277
    31. image: zhxl1989/boot-demo:2.1.17.2
    32. imagePullPolicy: IfNotPresent
    33. resources:
    34. limits:
    35. cpu: 1000m
    36. memory: 1024Mi
    37. requests:
    38. cpu: 500m
    39. memory: 512Mi
    40. ports:
    41. - name: demo9277
    42. containerPort: 9277
    43. protocol: TCP
    44. imagePullSecrets:
    45. - name: harbor-certification
    46. affinity:
    47. nodeAffinity:
    48. requiredDuringSchedulingIgnoredDuringExecution:
    49. nodeSelectorTerms:
    50. - matchExpressions:
    51. - key: kubernetes.io/arch
    52. operator: In
    53. values:
    54. - amd64
    55. ---
    56. apiVersion: v1
    57. kind: Service
    58. metadata:
    59. name: demo9277-service
    60. namespace: default
    61. labels:
    62. app: demo9277-service
    63. spec:
    64. type: ClusterIP
    65. ports:
    66. - port: 9277
    67. targetPort: 9277
    68. protocol: TCP
    69. name: http
    70. selector:
    71. app: demo9277

          部署测试程序,端口为9299:

      kubectl apply -f 9929.yaml   

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: demo9299
    5. namespace: default
    6. labels:
    7. app: demo9299
    8. version: stable
    9. spec:
    10. replicas: 1
    11. revisionHistoryLimit: 3
    12. selector:
    13. matchLabels:
    14. app: demo9299
    15. version: stable
    16. strategy:
    17. rollingUpdate:
    18. maxSurge: 30%
    19. maxUnavailable: 30%
    20. type: RollingUpdate
    21. template:
    22. metadata:
    23. annotations:
    24. sidecar.istio.io/inject: "false"
    25. labels:
    26. app: demo9299
    27. version: stable
    28. spec:
    29. containers:
    30. - name: demo9299
    31. image: zhxl1989/boot-demo:latest
    32. imagePullPolicy: IfNotPresent
    33. resources:
    34. limits:
    35. cpu: 500
    36. memory: 512Mi
    37. requests:
    38. cpu: 500m
    39. memory: 512Mi
    40. ports:
    41. - name: demo9299
    42. containerPort: 9299
    43. protocol: TCP
    44. imagePullSecrets:
    45. - name: harbor-certification
    46. affinity:
    47. nodeAffinity:
    48. requiredDuringSchedulingIgnoredDuringExecution:
    49. nodeSelectorTerms:
    50. - matchExpressions:
    51. - key: kubernetes.io/arch
    52. operator: In
    53. values:
    54. - amd64
    55. ---
    56. apiVersion: v1
    57. kind: Service
    58. metadata:
    59. name: demo9299-service
    60. namespace: default
    61. labels:
    62. app: demo9299-service
    63. spec:
    64. type: ClusterIP
    65. ports:
    66. - port: 9299
    67. targetPort: 9299
    68. protocol: TCP
    69. name: http
    70. selector:
    71. app: demo9299

    5.部署转发规则

     kubectl apply -f deploy-ingress-gateway.yaml

    1. apiVersion: networking.k8s.io/v1
    2. kind: Ingress
    3. metadata:
    4. annotations:
    5. nginx.ingress.kubernetes.io/use-regex: "true"
    6. nginx.ingress.kubernetes.io/enable-cors: "true"
    7. nginx.ingress.kubernetes.io/rewrite-target: /$2
    8. nginx.ingress.kubernetes.io/affinity: "cookie"
    9. nginx.ingress.kubernetes.io/affinity-mode: "persistent"
    10. nginx.ingress.kubernetes.io/session-cookie-name: "route"
    11. nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    12. nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
    13. nginx.ingress.kubernetes.io/proxy-read-timeout: "36000"
    14. nginx.ingress.kubernetes.io/use-regex: "true"
    15. nginx.ingress.kubernetes.io/enable-cors: "true"
    16. nginx.ingress.kubernetes.io/configuration-snippet: |
    17. rewrite ^/css/(.*)$ /demo/css/$1 redirect;
    18. rewrite ^/js/(.*)$ /demo/js/$1 redirect;
    19. rewrite ^/images/(.*)$ /demo/images/$1 redirect;
    20. rewrite ^/stylesheets/(.*)$ /demo/stylesheets/$1 redirect;
    21. rewrite /sever/(.*) /sever/$1 break;
    22. proxy_set_header Upgrade $http_upgrade;
    23. proxy_set_header Connection "Upgrade";
    24. name: nginx-ingress
    25. namespace: default
    26. spec:
    27. ingressClassName: nginx
    28. rules:
    29. - host:
    30. http:
    31. paths:
    32. - backend:
    33. service:
    34. name: demo9299-service
    35. port:
    36. number: 9299
    37. path: /demo9299(/|$)(.*)
    38. pathType: Prefix
    39. - host:
    40. http:
    41. paths:
    42. - backend:
    43. service:
    44. name: demo9277-service
    45. port:
    46. number: 9277
    47. path: /demo9277(/|$)(.*)
    48. pathType: Prefix

      查看部署的转发规则

       kubectl describe ingress/nginx-ingress

       

    6.验证效果

    访问端口9277服务

    访问端口9299服务

  • 相关阅读:
    【学习笔记】数位dp
    MySQL更新锁表超时 Lock wait timeout exceeded
    教你如何在优麒麟上搭建 RISC-V 交叉编译环境
    设计模式——封装
    解读AXI协议,做一个不被AXI折磨的芯片设计工程师
    [C++](10)C++的string类如何实现?
    async与await
    【GPT4O 开启多模态新时代!】
    [附源码]java毕业设计企业公开招聘系统
    python+django汽车租赁系统pycharm项目
  • 原文地址:https://blog.csdn.net/TT1024167802/article/details/126185503