k8s-ingress-nginx搭建

红太狼 2022-10-16 06:12 377阅读 0赞

首先区分开ingress和ingress-controller

前者个人理解是一种集群中服务之间访问控制策略

后者是client访问集群时得一种方式如下图
思维导图(部署方式不同,略有差别)
在这里插入图片描述
暴露服务还分几种方式
一 .Deployment+LoadBalancer模式的Service
客户端不能直接访问集群服务,创建ingress controller 的多副本模式 整套需要创建2个负载均衡 一个是proxy到ingress controller,一个是进来集群到后端服务的ingress的反向代理 需绑定2个svc。

二.Deployment+NodePort模式的Service
client直接访问集群服务,通过标签匹配node节点,创建的资源同上,只不过ingress controller的svc需修改成nodeport模式,node节点直接暴露服务,但是只能是30000-32767不方便客户使用。

三.DaemonSet+HostNetwork+nodeSelector (本次实验使用的方式)
通过标签匹配,选定node节点,使用主机网络模式,与上面的流程不同之处,整套流程创建一个ingress controller 绑定一个ingress代理一个svc绑定deployment
有一定依耐性,必须先启动Ingress Controller 服务
1.创建Ingress Controller

  1. vim mandatory.yaml
  2. ##190行之后定义适合自己的模式
  3. apiVersion: v1
  4. kind: Namespace
  5. metadata:
  6. name: ingress-nginx
  7. labels:
  8. app.kubernetes.io/name: ingress-nginx
  9. app.kubernetes.io/part-of: ingress-nginx
  10. ---
  11. kind: ConfigMap
  12. apiVersion: v1
  13. metadata:
  14. name: nginx-configuration
  15. namespace: ingress-nginx
  16. labels:
  17. app.kubernetes.io/name: ingress-nginx
  18. app.kubernetes.io/part-of: ingress-nginx
  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. kind: DaemonSet
  184. metadata:
  185. name: nginx-ingress-controller
  186. namespace: ingress-nginx
  187. labels:
  188. app.kubernetes.io/name: ingress-nginx
  189. app.kubernetes.io/part-of: ingress-nginx
  190. spec:
  191. # replicas: 1
  192. selector:
  193. matchLabels:
  194. app.kubernetes.io/name: ingress-nginx
  195. app.kubernetes.io/part-of: ingress-nginx
  196. template:
  197. metadata:
  198. labels:
  199. app.kubernetes.io/name: ingress-nginx
  200. app.kubernetes.io/part-of: ingress-nginx
  201. annotations:
  202. prometheus.io/port: "10254"
  203. prometheus.io/scrape: "true"
  204. spec:
  205. hostNetwork: true
  206. # wait up to five minutes for the drain of connections
  207. terminationGracePeriodSeconds: 300
  208. serviceAccountName: nginx-ingress-serviceaccount
  209. nodeSelector:
  210. kubernetes.io/os: linux
  211. nodes-rola: edg
  212. containers:
  213. - name: nginx-ingress-controller
  214. image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.29.0
  215. args:
  216. - /nginx-ingress-controller
  217. - --configmap=$(POD_NAMESPACE)/nginx-configuration
  218. - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
  219. - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
  220. - --publish-service=$(POD_NAMESPACE)/ingress-nginx
  221. - --annotations-prefix=nginx.ingress.kubernetes.io
  222. securityContext:
  223. allowPrivilegeEscalation: true
  224. capabilities:
  225. drop:
  226. - ALL
  227. add:
  228. - NET_BIND_SERVICE
  229. # www-data -> 101
  230. runAsUser: 101
  231. env:
  232. - name: POD_NAME
  233. valueFrom:
  234. fieldRef:
  235. fieldPath: metadata.name
  236. - name: POD_NAMESPACE
  237. valueFrom:
  238. fieldRef:
  239. fieldPath: metadata.namespace
  240. ports:
  241. - name: http
  242. containerPort: 80
  243. protocol: TCP
  244. - name: https
  245. containerPort: 443
  246. protocol: TCP
  247. livenessProbe:
  248. failureThreshold: 3
  249. httpGet:
  250. path: /healthz
  251. port: 10254
  252. scheme: HTTP
  253. initialDelaySeconds: 10
  254. periodSeconds: 10
  255. successThreshold: 1
  256. timeoutSeconds: 10
  257. readinessProbe:
  258. failureThreshold: 3
  259. httpGet:
  260. path: /healthz
  261. port: 10254
  262. scheme: HTTP
  263. periodSeconds: 10
  264. successThreshold: 1
  265. timeoutSeconds: 10
  266. lifecycle:
  267. preStop:
  268. exec:
  269. command:
  270. - /wait-shutdown
  271. ---
  272. apiVersion: v1
  273. kind: LimitRange
  274. metadata:
  275. name: ingress-nginx
  276. namespace: ingress-nginx
  277. labels:
  278. app.kubernetes.io/name: ingress-nginx
  279. app.kubernetes.io/part-of: ingress-nginx
  280. spec:
  281. limits:
  282. - min:
  283. memory: 90Mi
  284. cpu: 100m
  285. type: Container

如果是cluster,nodeport的话 还需要一个svc代理Ingress Controller

  1. vim mandatory-svc.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: ingress-nginx
  6. namespace: ingress-nginx
  7. spec:
  8. ports:
  9. - name: http
  10. port: 80
  11. targetPort: 80
  12. - name: https
  13. port: 443
  14. targetPort: 443
  15. selector:
  16. app.kubernetes.io/name: ingress-nginx
  17. type: ClusterIP

这里我们用的主机网络模式 所以不用创建svc
3.创建转发规则ingress

  1. vim ingress-nginx.yaml
  2. apiVersion: extensions/v1beta1
  3. kind: Ingress
  4. metadata:
  5. name: ingress-mynginx
  6. namespace: default ##修改命名空间
  7. annotations:
  8. kubernetes.io/ingress.class: "nginx"
  9. spec:
  10. rules:
  11. - host: mynginx.com
  12. http:
  13. paths:
  14. - path:
  15. backend:
  16. serviceName: service-nginx ##绑定后端服务
  17. servicePort: 80

4.创建后端web服务

  1. vim my-nginx.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: service-nginx ##与上面的ingress需一致,绑定关系
  6. namespace: default ##命名空间
  7. spec:
  8. selector:
  9. app: mynginx ##绑定下面的deployment启的pod
  10. ports:
  11. - name: http
  12. port: 80
  13. targetPort: 80
  14. ---
  15. apiVersion: apps/v1
  16. kind: Deployment
  17. metadata:
  18. name: mynginx ##deployment的名字 无依赖关系
  19. namespace: default
  20. spec:
  21. replicas: 2
  22. selector:
  23. matchLabels:
  24. app: mynginx ##这里是deployment和svc绑定关系,下面pod也得一致
  25. template:
  26. metadata:
  27. labels:
  28. app: mynginx ##与上面得deployment绑定,才能让deploy管理pod
  29. spec:
  30. containers:
  31. - name: mycontainer
  32. image: nginx
  33. imagePullPolicy: IfNotPresent
  34. ports:
  35. - name: nginx
  36. containerPort: 80

发表评论

表情:
评论列表 (有 0 条评论,377人围观)

还没有评论,来说两句吧...

相关阅读

    相关 K8S 集群

    1、搭建清单 2台linux服务器(一个master节点,一个node节点),建议搭3台(一个master,两个node) 我使用的是腾讯云,节点与节点使用公网I

    相关 单机K8s

    单机版K8s搭建,使用的是`docker + kubectl + minikube`三部分组合而成。 对于个人来说,搭建一个K8s环境用来深入学习和了解K8s还是有

    相关 k8sgitlab

    `Gitlab`官方提供了 Helm 的方式在 Kubernetes 集群中来快速安装,但是在使用的过程中发现 Helm 提供的 Chart 包中有很多其他额外的配置,所以我们

    相关 k8s-ingress-nginx

    首先区分开ingress和ingress-controller 前者个人理解是一种集群中服务之间访问控制策略 后者是client访问集群时得一种方式如下图 思维导图(部

    相关 [K8S] Zabbix

    什么?还没有搭建k8s,那赶紧看看 [\[K8S\] 认证集群搭建][K8S_] 吧 容器这么火,我也玩玩,搭个zabbix测试下   1、首先上传 zabbix 相关镜