【运维知识大神篇】运维界的超神器Kubernetes教程13(LNMT架构上K8s集群之Z ...

打印 上一主题 下一主题

主题 782|帖子 782|积分 2361

本篇文章继续给各人先容Kubernetes的实战,部署zrlog博客的项目到K8s集群,之前在进阶篇先容过该项目的搭建,详见下面两篇文章,部署项目的时间先规划,有了思路之后,按照思路去部署,这样一个地方出错了,解决一个地方的题目,不至于题目解决解决着不知道要干啥了,并且这么干团体的思路不容易出错。
【运维知识进阶篇】Tomcat快速入门(Java环境先容+Tomcat快速安装+Tomcat配置文件+Tomcat配置虚拟主机+Tomcat管理界面+Tomcat部署zrlog博客项目)_java tomcat-CSDN博客
【运维知识进阶篇】Tomcat集群实战之部署zrlog博客(Tomcat服务安装+静态资源挂载NFS+Nginx负载均衡+HTTPS证书+Redis会话保持)_tomcat集群部署-CSDN博客
一、部署思路

1、先梳理下部署该项目到k8s的思路,再去现实操作。
2、首先我们要了解该项目,通过之前的文章我了解到该项目必要使用tomcat进行启动,必要做nfs挂载,前端还可以加上负载均衡,使用https证书去访问,我们只考虑后端的操作即可,后端把这个项目上到k8s后,提供出一个访问入口,前端的负载均衡与https证书的操作与传统的tomcat部署是一样的;
3、或者根本不必要部署nginx做负载均衡,因为k8s的service资源本身就具备负载均衡的结果。https证书也可以通过secret的情势挂载到ingress实现https证书访问网站。我们采取这个方式比较好。
4、那么首先我们明确必要准备的内容是一个zrlog的程序包,https的证书。然后去一步步去编写yaml文件即可,关于k8s的资源,我准备使用deployment部署这种无状态服务,service提供访问入口,ingress绑定证书。
二、现实操作

1、创建zrlog的文件存储空间
之前已经部署了nfs服务,创建单独目录,把程序包放到我们准备的共享目录,解压
  1. [root@Master231 kubernetes]# cat /etc/exports
  2. /koten/data/kubernetes *(rw,no_root_squash)
  3. /wordpress/data *(rw,no_root_squash)
  4. [root@Master231 kubernetes]# pwd
  5. /koten/data/kubernetes
  6. [root@Master231 kubernetes]# mkdir zrlog
  7. [root@Master231 kubernetes]# cp ~/zrlog-2.2.1-efbe9f9-release.war zrlog/
  8. [root@Master231 kubernetes]# unzip -q zrlog/zrlog-2.2.1-efbe9f9-release.war -d zrlog/
  9. [root@Master231 kubernetes]# rm zrlog/zrlog-2.2.1-efbe9f9-release.war
  10. rm: remove regular file ‘zrlog-2.2.1-efbe9f9-release.war’? y
复制代码
2、先通过docker运行,查看结果
  1. [root@Master231 ~]# docker run -p 8080:8080 -v /koten/data/kubernetes/zrlog:/usr/local/tomcat/webapps/ROOT --name zrlog -itd zrlog:v1
  2. d4a6428fc8d837d4948535fc024bae4739e488940860bde550be56f2295f1455
复制代码

3、编写deployment、service的yaml文件,部署出zrlog服务。
  1. [root@Master231 ~]# cat 01-zrlog-deployment-service.yaml
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5.   name: deploy-zrlog
  6.   namespace: zrlog
  7.   labels:
  8.     apps: zrlog
  9. spec:
  10.   replicas: 3
  11.   selector:
  12.     matchExpressions:
  13.     - key: apps
  14.       values:
  15.       - "zrlog"
  16.       operator: In
  17.   template:
  18.     metadata:
  19.       labels:
  20.         apps: zrlog
  21.     spec:
  22.       volumes:
  23.       - name: data-zrlog
  24.         nfs:
  25.           server: master231
  26.           path: /koten/data/kubernetes/zrlog
  27.       containers:
  28.       - name: zrlog
  29.         image: tomcat:8
  30.         volumeMounts:
  31.         - name: data-zrlog
  32.           mountPath: /usr/local/tomcat/webapps/ROOT
  33.         ports:  
  34.         - containerPort: 8080
  35. ---
  36. apiVersion: v1
  37. kind: Service
  38. metadata:
  39.   name: service-zrlog
  40.   namespace: zrlog
  41. spec:
  42.   type: NodePort
  43.   selector:
  44.     apps: zrlog
  45.   ports:
  46.   - port: 8080
  47.     targetPort: 8080
  48.     nodePort: 8080
  49. [root@Master231 ~]# kubectl create ns zrlog
  50. namespace/zrlog created
  51. [root@Master231 ~]# kubectl apply -f zrlog-deployment-service.yaml
  52. deployment.apps/deploy-zrlog created
  53. service/deploy-v1 created
  54. [root@Master231 ~]# kubectl get -f zrlog-deployment-service.yaml
  55. NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
  56. deployment.apps/deploy-zrlog   3/3     3            3           9s
  57. NAME                TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
  58. service/deploy-v1   NodePort   10.200.175.3   <none>        8080:8080/TCP   9s
复制代码
4、通过pod所在节点的ip加8080端口,可以访问到我们的服务(此处应该是任意一个ip都可以,详见未解之谜),由于我们挂载了代码文件到nfs,以是3个副本直接访问nfs实现读取代码文件

5、部署ingress-nginx
  1. [root@Master231 ~]# cat 02-ingress-nginx.yaml
  2. apiVersion: v1
  3. kind: Namespace
  4. metadata:
  5.   name: ingress-nginx
  6.   labels:
  7.     app.kubernetes.io/name: ingress-nginx
  8.     app.kubernetes.io/instance: ingress-nginx
  9. ---
  10. # Source: ingress-nginx/templates/controller-serviceaccount.yaml
  11. apiVersion: v1
  12. kind: ServiceAccount
  13. metadata:
  14.   labels:
  15.     helm.sh/chart: ingress-nginx-4.0.1
  16.     app.kubernetes.io/name: ingress-nginx
  17.     app.kubernetes.io/instance: ingress-nginx
  18.     app.kubernetes.io/version: 1.0.0
  19.     app.kubernetes.io/managed-by: Helm
  20.     app.kubernetes.io/component: controller
  21.   name: ingress-nginx
  22.   namespace: ingress-nginx
  23. automountServiceAccountToken: true
  24. ---
  25. # Source: ingress-nginx/templates/controller-configmap.yaml
  26. apiVersion: v1
  27. kind: ConfigMap
  28. metadata:
  29.   labels:
  30.     helm.sh/chart: ingress-nginx-4.0.1
  31.     app.kubernetes.io/name: ingress-nginx
  32.     app.kubernetes.io/instance: ingress-nginx
  33.     app.kubernetes.io/version: 1.0.0
  34.     app.kubernetes.io/managed-by: Helm
  35.     app.kubernetes.io/component: controller
  36.   name: ingress-nginx-controller
  37.   namespace: ingress-nginx
  38. data:
  39. ---
  40. # Source: ingress-nginx/templates/clusterrole.yaml
  41. apiVersion: rbac.authorization.k8s.io/v1
  42. kind: ClusterRole
  43. metadata:
  44.   labels:
  45.     helm.sh/chart: ingress-nginx-4.0.1
  46.     app.kubernetes.io/name: ingress-nginx
  47.     app.kubernetes.io/instance: ingress-nginx
  48.     app.kubernetes.io/version: 1.0.0
  49.     app.kubernetes.io/managed-by: Helm
  50.   name: ingress-nginx
  51. rules:
  52.   - apiGroups:
  53.       - ''
  54.     resources:
  55.       - configmaps
  56.       - endpoints
  57.       - nodes
  58.       - pods
  59.       - secrets
  60.     verbs:
  61.       - list
  62.       - watch
  63.   - apiGroups:
  64.       - ''
  65.     resources:
  66.       - nodes
  67.     verbs:
  68.       - get
  69.   - apiGroups:
  70.       - ''
  71.     resources:
  72.       - services
  73.     verbs:
  74.       - get
  75.       - list
  76.       - watch
  77.   - apiGroups:
  78.       - networking.k8s.io
  79.     resources:
  80.       - ingresses
  81.     verbs:
  82.       - get
  83.       - list
  84.       - watch
  85.   - apiGroups:
  86.       - ''
  87.     resources:
  88.       - events
  89.     verbs:
  90.       - create
  91.       - patch
  92.   - apiGroups:
  93.       - networking.k8s.io
  94.     resources:
  95.       - ingresses/status
  96.     verbs:
  97.       - update
  98.   - apiGroups:
  99.       - networking.k8s.io
  100.     resources:
  101.       - ingressclasses
  102.     verbs:
  103.       - get
  104.       - list
  105.       - watch
  106. ---
  107. # Source: ingress-nginx/templates/clusterrolebinding.yaml
  108. apiVersion: rbac.authorization.k8s.io/v1
  109. kind: ClusterRoleBinding
  110. metadata:
  111.   labels:
  112.     helm.sh/chart: ingress-nginx-4.0.1
  113.     app.kubernetes.io/name: ingress-nginx
  114.     app.kubernetes.io/instance: ingress-nginx
  115.     app.kubernetes.io/version: 1.0.0
  116.     app.kubernetes.io/managed-by: Helm
  117.   name: ingress-nginx
  118. roleRef:
  119.   apiGroup: rbac.authorization.k8s.io
  120.   kind: ClusterRole
  121.   name: ingress-nginx
  122. subjects:
  123.   - kind: ServiceAccount
  124.     name: ingress-nginx
  125.     namespace: ingress-nginx
  126. ---
  127. # Source: ingress-nginx/templates/controller-role.yaml
  128. apiVersion: rbac.authorization.k8s.io/v1
  129. kind: Role
  130. metadata:
  131.   labels:
  132.     helm.sh/chart: ingress-nginx-4.0.1
  133.     app.kubernetes.io/name: ingress-nginx
  134.     app.kubernetes.io/instance: ingress-nginx
  135.     app.kubernetes.io/version: 1.0.0
  136.     app.kubernetes.io/managed-by: Helm
  137.     app.kubernetes.io/component: controller
  138.   name: ingress-nginx
  139.   namespace: ingress-nginx
  140. rules:
  141.   - apiGroups:
  142.       - ''
  143.     resources:
  144.       - namespaces
  145.     verbs:
  146.       - get
  147.   - apiGroups:
  148.       - ''
  149.     resources:
  150.       - configmaps
  151.       - pods
  152.       - secrets
  153.       - endpoints
  154.     verbs:
  155.       - get
  156.       - list
  157.       - watch
  158.   - apiGroups:
  159.       - ''
  160.     resources:
  161.       - services
  162.     verbs:
  163.       - get
  164.       - list
  165.       - watch
  166.   - apiGroups:
  167.       - networking.k8s.io
  168.     resources:
  169.       - ingresses
  170.     verbs:
  171.       - get
  172.       - list
  173.       - watch
  174.   - apiGroups:
  175.       - networking.k8s.io
  176.     resources:
  177.       - ingresses/status
  178.     verbs:
  179.       - update
  180.   - apiGroups:
  181.       - networking.k8s.io
  182.     resources:
  183.       - ingressclasses
  184.     verbs:
  185.       - get
  186.       - list
  187.       - watch
  188.   - apiGroups:
  189.       - ''
  190.     resources:
  191.       - configmaps
  192.     resourceNames:
  193.       - ingress-controller-leader
  194.     verbs:
  195.       - get
  196.       - update
  197.   - apiGroups:
  198.       - ''
  199.     resources:
  200.       - configmaps
  201.     verbs:
  202.       - create
  203.   - apiGroups:
  204.       - ''
  205.     resources:
  206.       - events
  207.     verbs:
  208.       - create
  209.       - patch
  210. ---
  211. # Source: ingress-nginx/templates/controller-rolebinding.yaml
  212. apiVersion: rbac.authorization.k8s.io/v1
  213. kind: RoleBinding
  214. metadata:
  215.   labels:
  216.     helm.sh/chart: ingress-nginx-4.0.1
  217.     app.kubernetes.io/name: ingress-nginx
  218.     app.kubernetes.io/instance: ingress-nginx
  219.     app.kubernetes.io/version: 1.0.0
  220.     app.kubernetes.io/managed-by: Helm
  221.     app.kubernetes.io/component: controller
  222.   name: ingress-nginx
  223.   namespace: ingress-nginx
  224. roleRef:
  225.   apiGroup: rbac.authorization.k8s.io
  226.   kind: Role
  227.   name: ingress-nginx
  228. subjects:
  229.   - kind: ServiceAccount
  230.     name: ingress-nginx
  231.     namespace: ingress-nginx
  232. ---
  233. # Source: ingress-nginx/templates/controller-service-webhook.yaml
  234. apiVersion: v1
  235. kind: Service
  236. metadata:
  237.   labels:
  238.     helm.sh/chart: ingress-nginx-4.0.1
  239.     app.kubernetes.io/name: ingress-nginx
  240.     app.kubernetes.io/instance: ingress-nginx
  241.     app.kubernetes.io/version: 1.0.0
  242.     app.kubernetes.io/managed-by: Helm
  243.     app.kubernetes.io/component: controller
  244.   name: ingress-nginx-controller-admission
  245.   namespace: ingress-nginx
  246. spec:
  247.   type: ClusterIP
  248.   ports:
  249.     - name: https-webhook
  250.       port: 443
  251.       targetPort: webhook
  252.       appProtocol: https
  253.   selector:
  254.     app.kubernetes.io/name: ingress-nginx
  255.     app.kubernetes.io/instance: ingress-nginx
  256.     app.kubernetes.io/component: controller
  257. ---
  258. # Source: ingress-nginx/templates/controller-service.yaml
  259. apiVersion: v1
  260. kind: Service
  261. metadata:
  262.   annotations:
  263.   labels:
  264.     helm.sh/chart: ingress-nginx-4.0.1
  265.     app.kubernetes.io/name: ingress-nginx
  266.     app.kubernetes.io/instance: ingress-nginx
  267.     app.kubernetes.io/version: 1.0.0
  268.     app.kubernetes.io/managed-by: Helm
  269.     app.kubernetes.io/component: controller
  270.   name: ingress-nginx-controller
  271.   namespace: ingress-nginx
  272. spec:
  273.   type: NodePort
  274.   ports:
  275.     - name: http
  276.       port: 80
  277.       protocol: TCP
  278.       targetPort: http
  279.       appProtocol: http
  280.     - name: https
  281.       port: 443
  282.       protocol: TCP
  283.       targetPort: https
  284.       appProtocol: https
  285.   selector:
  286.     app.kubernetes.io/name: ingress-nginx
  287.     app.kubernetes.io/instance: ingress-nginx
  288.     app.kubernetes.io/component: controller
  289. ---
  290. # Source: ingress-nginx/templates/controller-deployment.yaml
  291. apiVersion: apps/v1
  292. kind: Deployment
  293. metadata:
  294.   labels:
  295.     helm.sh/chart: ingress-nginx-4.0.1
  296.     app.kubernetes.io/name: ingress-nginx
  297.     app.kubernetes.io/instance: ingress-nginx
  298.     app.kubernetes.io/version: 1.0.0
  299.     app.kubernetes.io/managed-by: Helm
  300.     app.kubernetes.io/component: controller
  301.   name: ingress-nginx-controller
  302.   namespace: ingress-nginx
  303. spec:
  304.   selector:
  305.     matchLabels:
  306.       app.kubernetes.io/name: ingress-nginx
  307.       app.kubernetes.io/instance: ingress-nginx
  308.       app.kubernetes.io/component: controller
  309.   revisionHistoryLimit: 10
  310.   minReadySeconds: 0
  311.   template:
  312.     metadata:
  313.       labels:
  314.         app.kubernetes.io/name: ingress-nginx
  315.         app.kubernetes.io/instance: ingress-nginx
  316.         app.kubernetes.io/component: controller
  317.     spec:
  318.       dnsPolicy: ClusterFirst
  319.       containers:
  320.         - name: controller
  321.           #image: k8s.gcr.io/ingress-nginx/controller:v1.0.0@sha256:0851b34f69f69352bf168e6ccf30e1e20714a264ab1ecd1933e4d8c0fc3215c6
  322.           image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.0.0
  323.           imagePullPolicy: IfNotPresent
  324.           lifecycle:
  325.             preStop:
  326.               exec:
  327.                 command:
  328.                   - /wait-shutdown
  329.           args:
  330.             - /nginx-ingress-controller
  331.             - --election-id=ingress-controller-leader
  332.             - --controller-class=k8s.io/ingress-nginx
  333.             - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
  334.             - --validating-webhook=:8443
  335.             - --validating-webhook-certificate=/usr/local/certificates/cert
  336.             - --validating-webhook-key=/usr/local/certificates/key
  337.           securityContext:
  338.             capabilities:
  339.               drop:
  340.                 - ALL
  341.               add:
  342.                 - NET_BIND_SERVICE
  343.             runAsUser: 101
  344.             allowPrivilegeEscalation: true
  345.           env:
  346.             - name: POD_NAME
  347.               valueFrom:
  348.                 fieldRef:
  349.                   fieldPath: metadata.name
  350.             - name: POD_NAMESPACE
  351.               valueFrom:
  352.                 fieldRef:
  353.                   fieldPath: metadata.namespace
  354.             - name: LD_PRELOAD
  355.               value: /usr/local/lib/libmimalloc.so
  356.           livenessProbe:
  357.             failureThreshold: 5
  358.             httpGet:
  359.               path: /healthz
  360.               port: 10254
  361.               scheme: HTTP
  362.             initialDelaySeconds: 10
  363.             periodSeconds: 10
  364.             successThreshold: 1
  365.             timeoutSeconds: 1
  366.           readinessProbe:
  367.             failureThreshold: 3
  368.             httpGet:
  369.               path: /healthz
  370.               port: 10254
  371.               scheme: HTTP
  372.             initialDelaySeconds: 10
  373.             periodSeconds: 10
  374.             successThreshold: 1
  375.             timeoutSeconds: 1
  376.           ports:
  377.             - name: http
  378.               containerPort: 80
  379.               protocol: TCP
  380.             - name: https
  381.               containerPort: 443
  382.               protocol: TCP
  383.             - name: webhook
  384.               containerPort: 8443
  385.               protocol: TCP
  386.           volumeMounts:
  387.             - name: webhook-cert
  388.               mountPath: /usr/local/certificates/
  389.               readOnly: true
  390.           resources:
  391.             requests:
  392.               cpu: 100m
  393.               memory: 90Mi
  394.       nodeSelector:
  395.         kubernetes.io/os: linux
  396.       serviceAccountName: ingress-nginx
  397.       terminationGracePeriodSeconds: 300
  398.       volumes:
  399.         - name: webhook-cert
  400.           secret:
  401.             secretName: ingress-nginx-admission
  402. ---
  403. # Source: ingress-nginx/templates/controller-ingressclass.yaml
  404. # We don't support namespaced ingressClass yet
  405. # So a ClusterRole and a ClusterRoleBinding is required
  406. apiVersion: networking.k8s.io/v1
  407. kind: IngressClass
  408. metadata:
  409.   labels:
  410.     helm.sh/chart: ingress-nginx-4.0.1
  411.     app.kubernetes.io/name: ingress-nginx
  412.     app.kubernetes.io/instance: ingress-nginx
  413.     app.kubernetes.io/version: 1.0.0
  414.     app.kubernetes.io/managed-by: Helm
  415.     app.kubernetes.io/component: controller
  416.   name: nginx
  417.   namespace: ingress-nginx
  418. spec:
  419.   controller: k8s.io/ingress-nginx
  420. ---
  421. # Source: ingress-nginx/templates/admission-webhooks/validating-webhook.yaml
  422. # before changing this value, check the required kubernetes version
  423. # https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#prerequisites
  424. apiVersion: admissionregistration.k8s.io/v1
  425. kind: ValidatingWebhookConfiguration
  426. metadata:
  427.   labels:
  428.     helm.sh/chart: ingress-nginx-4.0.1
  429.     app.kubernetes.io/name: ingress-nginx
  430.     app.kubernetes.io/instance: ingress-nginx
  431.     app.kubernetes.io/version: 1.0.0
  432.     app.kubernetes.io/managed-by: Helm
  433.     app.kubernetes.io/component: admission-webhook
  434.   name: ingress-nginx-admission
  435. webhooks:
  436.   - name: validate.nginx.ingress.kubernetes.io
  437.     matchPolicy: Equivalent
  438.     rules:
  439.       - apiGroups:
  440.           - networking.k8s.io
  441.         apiVersions:
  442.           - v1
  443.         operations:
  444.           - CREATE
  445.           - UPDATE
  446.         resources:
  447.           - ingresses
  448.     failurePolicy: Fail
  449.     sideEffects: None
  450.     admissionReviewVersions:
  451.       - v1
  452.     clientConfig:
  453.       service:
  454.         namespace: ingress-nginx
  455.         name: ingress-nginx-controller-admission
  456.         path: /networking/v1/ingresses
  457. ---
  458. # Source: ingress-nginx/templates/admission-webhooks/job-patch/serviceaccount.yaml
  459. apiVersion: v1
  460. kind: ServiceAccount
  461. metadata:
  462.   name: ingress-nginx-admission
  463.   namespace: ingress-nginx
  464.   annotations:
  465.     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
  466.     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  467.   labels:
  468.     helm.sh/chart: ingress-nginx-4.0.1
  469.     app.kubernetes.io/name: ingress-nginx
  470.     app.kubernetes.io/instance: ingress-nginx
  471.     app.kubernetes.io/version: 1.0.0
  472.     app.kubernetes.io/managed-by: Helm
  473.     app.kubernetes.io/component: admission-webhook
  474. ---
  475. # Source: ingress-nginx/templates/admission-webhooks/job-patch/clusterrole.yaml
  476. apiVersion: rbac.authorization.k8s.io/v1
  477. kind: ClusterRole
  478. metadata:
  479.   name: ingress-nginx-admission
  480.   annotations:
  481.     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
  482.     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  483.   labels:
  484.     helm.sh/chart: ingress-nginx-4.0.1
  485.     app.kubernetes.io/name: ingress-nginx
  486.     app.kubernetes.io/instance: ingress-nginx
  487.     app.kubernetes.io/version: 1.0.0
  488.     app.kubernetes.io/managed-by: Helm
  489.     app.kubernetes.io/component: admission-webhook
  490. rules:
  491.   - apiGroups:
  492.       - admissionregistration.k8s.io
  493.     resources:
  494.       - validatingwebhookconfigurations
  495.     verbs:
  496.       - get
  497.       - update
  498. ---
  499. # Source: ingress-nginx/templates/admission-webhooks/job-patch/clusterrolebinding.yaml
  500. apiVersion: rbac.authorization.k8s.io/v1
  501. kind: ClusterRoleBinding
  502. metadata:
  503.   name: ingress-nginx-admission
  504.   annotations:
  505.     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
  506.     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  507.   labels:
  508.     helm.sh/chart: ingress-nginx-4.0.1
  509.     app.kubernetes.io/name: ingress-nginx
  510.     app.kubernetes.io/instance: ingress-nginx
  511.     app.kubernetes.io/version: 1.0.0
  512.     app.kubernetes.io/managed-by: Helm
  513.     app.kubernetes.io/component: admission-webhook
  514. roleRef:
  515.   apiGroup: rbac.authorization.k8s.io
  516.   kind: ClusterRole
  517.   name: ingress-nginx-admission
  518. subjects:
  519.   - kind: ServiceAccount
  520.     name: ingress-nginx-admission
  521.     namespace: ingress-nginx
  522. ---
  523. # Source: ingress-nginx/templates/admission-webhooks/job-patch/role.yaml
  524. apiVersion: rbac.authorization.k8s.io/v1
  525. kind: Role
  526. metadata:
  527.   name: ingress-nginx-admission
  528.   namespace: ingress-nginx
  529.   annotations:
  530.     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
  531.     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  532.   labels:
  533.     helm.sh/chart: ingress-nginx-4.0.1
  534.     app.kubernetes.io/name: ingress-nginx
  535.     app.kubernetes.io/instance: ingress-nginx
  536.     app.kubernetes.io/version: 1.0.0
  537.     app.kubernetes.io/managed-by: Helm
  538.     app.kubernetes.io/component: admission-webhook
  539. rules:
  540.   - apiGroups:
  541.       - ''
  542.     resources:
  543.       - secrets
  544.     verbs:
  545.       - get
  546.       - create
  547. ---
  548. # Source: ingress-nginx/templates/admission-webhooks/job-patch/rolebinding.yaml
  549. apiVersion: rbac.authorization.k8s.io/v1
  550. kind: RoleBinding
  551. metadata:
  552.   name: ingress-nginx-admission
  553.   namespace: ingress-nginx
  554.   annotations:
  555.     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
  556.     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  557.   labels:
  558.     helm.sh/chart: ingress-nginx-4.0.1
  559.     app.kubernetes.io/name: ingress-nginx
  560.     app.kubernetes.io/instance: ingress-nginx
  561.     app.kubernetes.io/version: 1.0.0
  562.     app.kubernetes.io/managed-by: Helm
  563.     app.kubernetes.io/component: admission-webhook
  564. roleRef:
  565.   apiGroup: rbac.authorization.k8s.io
  566.   kind: Role
  567.   name: ingress-nginx-admission
  568. subjects:
  569.   - kind: ServiceAccount
  570.     name: ingress-nginx-admission
  571.     namespace: ingress-nginx
  572. ---
  573. # Source: ingress-nginx/templates/admission-webhooks/job-patch/job-createSecret.yaml
  574. apiVersion: batch/v1
  575. kind: Job
  576. metadata:
  577.   name: ingress-nginx-admission-create
  578.   namespace: ingress-nginx
  579.   annotations:
  580.     helm.sh/hook: pre-install,pre-upgrade
  581.     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  582.   labels:
  583.     helm.sh/chart: ingress-nginx-4.0.1
  584.     app.kubernetes.io/name: ingress-nginx
  585.     app.kubernetes.io/instance: ingress-nginx
  586.     app.kubernetes.io/version: 1.0.0
  587.     app.kubernetes.io/managed-by: Helm
  588.     app.kubernetes.io/component: admission-webhook
  589. spec:
  590.   template:
  591.     metadata:
  592.       name: ingress-nginx-admission-create
  593.       labels:
  594.         helm.sh/chart: ingress-nginx-4.0.1
  595.         app.kubernetes.io/name: ingress-nginx
  596.         app.kubernetes.io/instance: ingress-nginx
  597.         app.kubernetes.io/version: 1.0.0
  598.         app.kubernetes.io/managed-by: Helm
  599.         app.kubernetes.io/component: admission-webhook
  600.     spec:
  601.       containers:
  602.         - name: create
  603.           #image: k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0@sha256:f3b6b39a6062328c095337b4cadcefd1612348fdd5190b1dcbcb9b9e90bd8068
  604.           image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.0
  605.           imagePullPolicy: IfNotPresent
  606.           args:
  607.             - create
  608.             - --host=ingress-nginx-controller-admission,ingress-nginx-controller-admission.$(POD_NAMESPACE).svc
  609.             - --namespace=$(POD_NAMESPACE)
  610.             - --secret-name=ingress-nginx-admission
  611.           env:
  612.             - name: POD_NAMESPACE
  613.               valueFrom:
  614.                 fieldRef:
  615.                   fieldPath: metadata.namespace
  616.       restartPolicy: OnFailure
  617.       serviceAccountName: ingress-nginx-admission
  618.       nodeSelector:
  619.         kubernetes.io/os: linux
  620.       securityContext:
  621.         runAsNonRoot: true
  622.         runAsUser: 2000
  623. ---
  624. # Source: ingress-nginx/templates/admission-webhooks/job-patch/job-patchWebhook.yaml
  625. apiVersion: batch/v1
  626. kind: Job
  627. metadata:
  628.   name: ingress-nginx-admission-patch
  629.   namespace: ingress-nginx
  630.   annotations:
  631.     helm.sh/hook: post-install,post-upgrade
  632.     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  633.   labels:
  634.     helm.sh/chart: ingress-nginx-4.0.1
  635.     app.kubernetes.io/name: ingress-nginx
  636.     app.kubernetes.io/instance: ingress-nginx
  637.     app.kubernetes.io/version: 1.0.0
  638.     app.kubernetes.io/managed-by: Helm
  639.     app.kubernetes.io/component: admission-webhook
  640. spec:
  641.   template:
  642.     metadata:
  643.       name: ingress-nginx-admission-patch
  644.       labels:
  645.         helm.sh/chart: ingress-nginx-4.0.1
  646.         app.kubernetes.io/name: ingress-nginx
  647.         app.kubernetes.io/instance: ingress-nginx
  648.         app.kubernetes.io/version: 1.0.0
  649.         app.kubernetes.io/managed-by: Helm
  650.         app.kubernetes.io/component: admission-webhook
  651.     spec:
  652.       containers:
  653.         - name: patch
  654.           #image: k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0@sha256:f3b6b39a6062328c095337b4cadcefd1612348fdd5190b1dcbcb9b9e90bd8068
  655.           image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.0
  656.           imagePullPolicy: IfNotPresent
  657.           args:
  658.             - patch
  659.             - --webhook-name=ingress-nginx-admission
  660.             - --namespace=$(POD_NAMESPACE)
  661.             - --patch-mutating=false
  662.             - --secret-name=ingress-nginx-admission
  663.             - --patch-failure-policy=Fail
  664.           env:
  665.             - name: POD_NAMESPACE
  666.               valueFrom:
  667.                 fieldRef:
  668.                   fieldPath: metadata.namespace
  669.       restartPolicy: OnFailure
  670.       serviceAccountName: ingress-nginx-admission
  671.       nodeSelector:
  672.         kubernetes.io/os: linux
  673.       securityContext:
  674.         runAsNonRoot: true
  675.         runAsUser: 2000
复制代码
6、编写ingress的yaml文件,把NodePort调整成ClusterIP
  1. [root@Master231 ~]# cat 03-ingress.yaml
  2. apiVersion: networking.k8s.io/v1
  3. kind: Ingress
  4. metadata:
  5.   name: ingress-zrlog
  6.   namespace: zrlog
  7.   annotations:
  8.     nginx.ingress.kubernetes.io/rewrite-target: /
  9. spec:
  10.   ingressClassName: nginx
  11.   rules:
  12.   - host: zrlog.koten.vip
  13.     http:
  14.       paths:
  15.       - path: /
  16.         pathType: Prefix
  17.         backend:
  18.           service:
  19.             name: service-zrlog
  20.             port:
  21.               number: 8080
  22. [root@Master231 ~]# cat 01-zrlog-deployment-service.yaml
  23. ...
  24. apiVersion: v1
  25. kind: Service
  26. metadata:
  27.   name: service-zrlog
  28.   namespace: zrlog
  29. spec:
  30.   type: ClusterIP
  31.   selector:
  32.     apps: zrlog
  33.   ports:
  34.   - port: 8080
  35.     targetPort: 8080
  36. [root@Master231 ~]# kubectl apply -f 03-ingress.yaml
  37. [root@Master231 ~]# kubectl get ingress -A
  38. NAMESPACE   NAME            CLASS   HOSTS             ADDRESS      PORTS   AGE
  39. zrlog       ingress-zrlog   nginx   zrlog.koten.vip   10.0.0.233   80      38m
  40. [root@Master231 ~]# kubectl apply -f 01-zrlog-deployment-service.yaml
复制代码
7、通过域名访问,新增电脑的hosts上剖析(C:\Windows\System32\drivers\etc下的hosts文件)
  1. 10.0.0.231 zrlog.koten.vip
复制代码
端口用ingress的nodeport袒暴露来的端口,也可以在部署ingress-nginx的时间去改,改成指定nodePort为80
  1. [root@Master231 ~]# kubectl get svc -n ingress-nginx
  2. NAME                                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                     AGE
  3. ingress-nginx-controller             NodePort    10.200.199.140   <none>        80:9431/TCP,443:12175/TCP   23m
  4. ingress-nginx-controller-admission   ClusterIP   10.200.113.50    <none>        443/TCP                     23m
复制代码


此时没有证书我们用https访问是不可行的
8、在ingress上加上证书
  1. # 创建证书
  2. [root@Master231 ~]# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout zrlog_tls.key -out zrlog_tls.crt -subj "/CN=zrlog.koten.vip/O=zrlog.koten.vip"
  3. # 将证书写入secret
  4. [root@Master231 ~]# kubectl create secret tls zrlog-tls-secret --cert=/root/zrlog_tls.crt --key=/root/zrlog_tls.key -n zrlog
  5. # 把刚刚编写http的ingress的yaml改成https的ingress的yaml
  6. [root@Master231 ~]# cat 04-ingress-https.yaml
  7. apiVersion: networking.k8s.io/v1
  8. kind: Ingress
  9. metadata:
  10.   name: ingress-zrlog-https
  11.   namespace: zrlog
  12.   annotations:
  13.     nginx.ingress.kubernetes.io/rewrite-target: /
  14. spec:
  15.   ingressClassName: nginx
  16.   tls:
  17.   - hosts:
  18.     - zrlog.koten.vip
  19.     secretName: zrlog-tls-secret
  20.   rules:
  21.   - host: zrlog.koten.vip
  22.     http:
  23.       paths:
  24.       - path: /
  25.         pathType: Prefix
  26.         backend:
  27.           service:
  28.             name: service-zrlog
  29.             port:
  30.               number: 8080
  31. [root@Master231 ~]# kubectl apply -f 03-ingress.yaml
  32. [root@Master231 ~]# kubectl get ingress -A
  33. NAMESPACE   NAME            CLASS   HOSTS             ADDRESS      PORTS     AGE
  34. zrlog       ingress-zrlog   nginx   zrlog.koten.vip   10.0.0.233   80, 443   39m
复制代码
按原理我们到这里就可以用域名加ingress-nginx袒暴露来的外网端口可以访问了,但是这个项目比较特别,访问的时间有重定向操作。
访问 https://zrlog.koten.vip:12175 会自动重定向到 https://zrlog.koten.vip/install 但是80端口又无法直接访问,以是我们还是把ingress-nginx的nodeport袒露的端口改成80和443
  1. [root@Master231 ~]# cat 02-ingress-nginx.yaml
  2. ...
  3. 277       nodePort: 80
  4. ...
  5. 283       nodePort: 443
  6. ...
  7. # 注意提前更改端口可用范围
  8. [root@Master231 ~]# kubectl apply -f 02-ingress-nginx.yaml
复制代码
此时可以乐成访问了,生产环境每每也让ingress-nginx的nodeport袒暴露指定的端口,不愿定是80和443,但是基本上是固定不变的,前面还用云服务负载均衡做轮询,给服务提供一个访问的入口

后续还可以把数据库弄到pod上,一个小项目就这么被拆分成微服务,上k8s了
三、题目菜单

写这篇文章的时间遇到了个题目,svc用了nodeport,按理说我通过我任意一个节点的ip加袒露的端口,都可以访问到服务,我浏览器访问的时间只能用pod所在的节点IP加端口访问到,而不是所有ip,我的kube-proxy是正常的,试了iptables和ipvs都不行,清理了iptables规则,都不行。
我在服务器上curl pod所在的节点加端口,好比我3个pod,2个在2节点,1个在3节点。我curl2节点的时间就是curl3次通2次,curl1节点就是curl3次通1次,不知道为啥这么轮询,在浏览器访问的话2,3节点都是无感知的。1节点因为没有pod调度就是咋都通不了。
末了是重装了flannel解决了该题目。

我是koten,10年运维经验,持续分享运维干货,感谢各人的阅读和关注!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连全瓷种植牙齿制作中心

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表