用途:
    在master(LVS)节点上暴露端口(80,443),域名解析到VIP,实现nginx访问高可用

    官方地址:https://github.com/kubernetes/ingress-nginx/

    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/part-of: ingress-nginx
    8. ---
    9. kind: ConfigMap
    10. apiVersion: v1
    11. metadata:
    12. name: nginx-configuration
    13. namespace: ingress-nginx
    14. labels:
    15. app.kubernetes.io/name: ingress-nginx
    16. app.kubernetes.io/part-of: ingress-nginx
    17. data:
    18. proxy-body-size: "1000m"
    19. ---
    20. kind: ConfigMap
    21. apiVersion: v1
    22. metadata:
    23. name: tcp-services
    24. namespace: ingress-nginx
    25. labels:
    26. app.kubernetes.io/name: ingress-nginx
    27. app.kubernetes.io/part-of: ingress-nginx
    28. ---
    29. kind: ConfigMap
    30. apiVersion: v1
    31. metadata:
    32. name: udp-services
    33. namespace: ingress-nginx
    34. labels:
    35. app.kubernetes.io/name: ingress-nginx
    36. app.kubernetes.io/part-of: ingress-nginx
    37. ---
    38. apiVersion: v1
    39. kind: ServiceAccount
    40. metadata:
    41. name: nginx-ingress-serviceaccount
    42. namespace: ingress-nginx
    43. labels:
    44. app.kubernetes.io/name: ingress-nginx
    45. app.kubernetes.io/part-of: ingress-nginx
    46. ---
    47. apiVersion: rbac.authorization.k8s.io/v1beta1
    48. kind: ClusterRole
    49. metadata:
    50. name: nginx-ingress-clusterrole
    51. labels:
    52. app.kubernetes.io/name: ingress-nginx
    53. app.kubernetes.io/part-of: ingress-nginx
    54. rules:
    55. - apiGroups:
    56. - ""
    57. resources:
    58. - configmaps
    59. - endpoints
    60. - nodes
    61. - pods
    62. - secrets
    63. verbs:
    64. - list
    65. - watch
    66. - apiGroups:
    67. - ""
    68. resources:
    69. - nodes
    70. verbs:
    71. - get
    72. - apiGroups:
    73. - ""
    74. resources:
    75. - services
    76. verbs:
    77. - get
    78. - list
    79. - watch
    80. - apiGroups:
    81. - ""
    82. resources:
    83. - events
    84. verbs:
    85. - create
    86. - patch
    87. - apiGroups:
    88. - "extensions"
    89. - "networking.k8s.io"
    90. resources:
    91. - ingresses
    92. verbs:
    93. - get
    94. - list
    95. - watch
    96. - apiGroups:
    97. - "extensions"
    98. - "networking.k8s.io"
    99. resources:
    100. - ingresses/status
    101. verbs:
    102. - update
    103. ---
    104. apiVersion: rbac.authorization.k8s.io/v1beta1
    105. kind: Role
    106. metadata:
    107. name: nginx-ingress-role
    108. namespace: ingress-nginx
    109. labels:
    110. app.kubernetes.io/name: ingress-nginx
    111. app.kubernetes.io/part-of: ingress-nginx
    112. rules:
    113. - apiGroups:
    114. - ""
    115. resources:
    116. - configmaps
    117. - pods
    118. - secrets
    119. - namespaces
    120. verbs:
    121. - get
    122. - apiGroups:
    123. - ""
    124. resources:
    125. - configmaps
    126. resourceNames:
    127. # Defaults to "<election-id>-<ingress-class>"
    128. # Here: "<ingress-controller-leader>-<nginx>"
    129. # This has to be adapted if you change either parameter
    130. # when launching the nginx-ingress-controller.
    131. - "ingress-controller-leader-nginx"
    132. verbs:
    133. - get
    134. - update
    135. - apiGroups:
    136. - ""
    137. resources:
    138. - configmaps
    139. verbs:
    140. - create
    141. - apiGroups:
    142. - ""
    143. resources:
    144. - endpoints
    145. verbs:
    146. - get
    147. ---
    148. apiVersion: rbac.authorization.k8s.io/v1beta1
    149. kind: RoleBinding
    150. metadata:
    151. name: nginx-ingress-role-nisa-binding
    152. namespace: ingress-nginx
    153. labels:
    154. app.kubernetes.io/name: ingress-nginx
    155. app.kubernetes.io/part-of: ingress-nginx
    156. roleRef:
    157. apiGroup: rbac.authorization.k8s.io
    158. kind: Role
    159. name: nginx-ingress-role
    160. subjects:
    161. - kind: ServiceAccount
    162. name: nginx-ingress-serviceaccount
    163. namespace: ingress-nginx
    164. ---
    165. apiVersion: rbac.authorization.k8s.io/v1beta1
    166. kind: ClusterRoleBinding
    167. metadata:
    168. name: nginx-ingress-clusterrole-nisa-binding
    169. labels:
    170. app.kubernetes.io/name: ingress-nginx
    171. app.kubernetes.io/part-of: ingress-nginx
    172. roleRef:
    173. apiGroup: rbac.authorization.k8s.io
    174. kind: ClusterRole
    175. name: nginx-ingress-clusterrole
    176. subjects:
    177. - kind: ServiceAccount
    178. name: nginx-ingress-serviceaccount
    179. namespace: ingress-nginx
    180. ---
    181. apiVersion: apps/v1
    182. kind: Deployment
    183. metadata:
    184. name: nginx-ingress-controller
    185. namespace: ingress-nginx
    186. labels:
    187. app.kubernetes.io/name: ingress-nginx
    188. app.kubernetes.io/part-of: ingress-nginx
    189. spec:
    190. replicas: 2
    191. selector:
    192. matchLabels:
    193. app.kubernetes.io/name: ingress-nginx
    194. app.kubernetes.io/part-of: ingress-nginx
    195. template:
    196. metadata:
    197. labels:
    198. app.kubernetes.io/name: ingress-nginx
    199. app.kubernetes.io/part-of: ingress-nginx
    200. annotations:
    201. prometheus.io/port: "10254"
    202. prometheus.io/scrape: "true"
    203. spec:
    204. # wait up to five minutes for the drain of connections
    205. terminationGracePeriodSeconds: 300
    206. serviceAccountName: nginx-ingress-serviceaccount
    207. #暴露hostnetwork网络
    208. hostNetwork: true
    209. dnsPolicy: ClusterFirstWithHostNet
    210. ##在master上面暴露端口(80,443)
    211. tolerations:
    212. - key: "node-role.kubernetes.io/master"
    213. operator: "Exists"
    214. effect: "NoSchedule"
    215. ##ingress-nginx的POD只运行在master上
    216. affinity:
    217. nodeAffinity:
    218. requiredDuringSchedulingIgnoredDuringExecution:
    219. nodeSelectorTerms:
    220. - matchExpressions:
    221. - key: kubernetes.io/hostname
    222. operator: In
    223. values:
    224. - ci-k8s-master01
    225. - ci-k8s-master02
    226. - ci-k8s-master03
    227. containers:
    228. - name: nginx-ingress-controller
    229. image: registry.hundsun.com/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1
    230. args:
    231. - /nginx-ingress-controller
    232. - --configmap=$(POD_NAMESPACE)/nginx-configuration
    233. - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
    234. - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
    235. - --publish-service=$(POD_NAMESPACE)/ingress-nginx
    236. - --annotations-prefix=nginx.ingress.kubernetes.io
    237. securityContext:
    238. allowPrivilegeEscalation: true
    239. capabilities:
    240. drop:
    241. - ALL
    242. add:
    243. - NET_BIND_SERVICE
    244. # www-data -> 33
    245. runAsUser: 33
    246. env:
    247. - name: POD_NAME
    248. valueFrom:
    249. fieldRef:
    250. fieldPath: metadata.name
    251. - name: POD_NAMESPACE
    252. valueFrom:
    253. fieldRef:
    254. fieldPath: metadata.namespace
    255. ports:
    256. - name: http
    257. containerPort: 80
    258. - name: https
    259. containerPort: 443
    260. livenessProbe:
    261. failureThreshold: 3
    262. httpGet:
    263. path: /healthz
    264. port: 10254
    265. scheme: HTTP
    266. initialDelaySeconds: 10
    267. periodSeconds: 10
    268. successThreshold: 1
    269. timeoutSeconds: 10
    270. readinessProbe:
    271. failureThreshold: 3
    272. httpGet:
    273. path: /healthz
    274. port: 10254
    275. scheme: HTTP
    276. periodSeconds: 10
    277. successThreshold: 1
    278. timeoutSeconds: 10
    279. lifecycle:
    280. preStop:
    281. exec:
    282. command:
    283. - /wait-shutdown
    284. ---