ู…ู„ุงุญุธุฉ ุตุบูŠุฑุฉ ุญูˆู„ ู…ูˆุถูˆุน ุชุดุบูŠู„ vue.js ููŠ ู…ุฌู…ูˆุนุฉ kubernetes

ุงู„ุตูˆุฑุฉ
ู‡ุฐู‡ ู…ู„ุงุญุธุฉ ู‚ุตูŠุฑุฉ ุญูˆู„ ูƒูŠููŠุฉ ุญุฒู… ุชุทุจูŠู‚ vue.js ููŠ ู…ู„ู Dockerfile ุซู… ุชุดุบูŠู„ู‡ ููŠ ุญุงูˆูŠุฉ ููŠ kubernetes'e.


ู…ุงุฐุง ูŠูุนู„


ู„ู‚ุฏ ูƒุชุจุช ุจุฑู†ุงู…ุฌู‹ุง ุตุบูŠุฑู‹ุง ูŠูˆู„ุฏ ุฑู‚ู… NodePort ู…ุฌุงู†ูŠู‹ุง. ููŠ ุงู„ูˆุงู‚ุน ุŒ ู„ุง ุชูุนู„ ุดูŠุฆู‹ุง ู…ููŠุฏู‹ุง ุจุดูƒู„ ุฎุงุต ุŒ ูˆู„ูƒู† ู„ูŠุณ ุนู„ูŠูƒ ุฃู† ุชุถุบุท ุนู„ู‰ ุงู„ุจุญุซ ุนู† ู…ู†ูุฐ ุŒ ูˆู…ู† ุฃุฌู„ ุงู„ู…ุชุนุฉ ุŒ ุงู†ุธุฑ ูƒูŠู ูŠู…ูƒู† ุงู„ู‚ูŠุงู… ุจุฐู„ูƒ.


ุจุฏุฃ


ูŠุชูƒูˆู† ุงู„ู…ุดุฑูˆุน ุจุฃูƒู…ู„ู‡ ู…ู† ุฌุฒุฃูŠู† - ุงู„ูˆุงุฌู‡ุฉ ุงู„ุฃู…ุงู…ูŠุฉ ูˆุงู„ุฎุงุฏู…. ุชุทู„ุจ ุงู„ูˆุงุฌู‡ุฉ ุงู„ุฃู…ุงู…ูŠุฉ nodePort ู…ู† ุงู„ุฎุงุฏู… ุŒ ูˆูŠุฌุฏ ุฌุงู†ุจ ุงู„ุฎุงุฏู… ุจุนุถู‹ุง ู…ุฌุงู†ูŠู‹ุง ุนุจุฑ kubernetes api.
ููŠ ุงู„ูˆุงู‚ุน ุŒ ู„ูƒูŠ ูŠุนู…ู„ ู‡ุฐุง ููŠ ุนุงู…ู„ ุงู„ุฅุฑุณุงุก ุŒ ุชุญุชุงุฌ ุฅู„ู‰ ุงุณุชุฎุฑุงุฌ ุจุนุถ ุงู„ู…ุชุบูŠุฑุงุช ู…ู† ุงู„ุชุทุจูŠู‚ ุŒ ู…ุซู„ ุนู†ูˆุงู† kubernetes api ุŒ ูˆุงู„ู…ู†ูุฐ ุŒ ูˆุงู„ุฑู…ุฒ ุงู„ู…ู…ูŠุฒ ุŒ ูˆู…ุง ุฅู„ู‰ ุฐู„ูƒ.
ูŠุจุฏูˆ ู‡ุฐุง:


k8s-nodeport-gen/server/index.js: var k8sInfo = { url: process.env.K8SURL, port: process.env.K8SPORT, timeout: process.env.K8STIMEOUT || '30', respath: process.env.RESSPATH || '/api/v1/services', token: process.env.K8STOKEN, nodePortStart: process.env.K8SPORTSTART || '30000', nodePortEnd: process.env.K8SPORTEND || '32000' } app.listen(process.env.PORT || 8081) 

ู„ู†ูุชุฑุถ ุฃู† ูƒู„ ุดูŠุก ุชู… ุงุฎุชุจุงุฑู‡ ูˆูŠุนู…ู„ ุชุทุจูŠู‚ู†ุง.


ุฅู†ุดุงุก ุตูˆุฑุฉ ุนุงู…ู„ ู…ูŠู†ุงุก


ุฃูˆู„ุฆูƒ ุงู„ุฐูŠู† ุนู…ู„ูˆุง ู…ุน vue.js ูŠุนุฑููˆู† ุฃู† ู‡ู†ุงูƒ ุงู„ูƒุซูŠุฑ ู…ู† ุฌู…ูŠุน ุฃู†ูˆุงุน ุงู„ู…ู„ูุงุช ุŒ ูˆุงู„ุชูŠ ู‡ูŠ ุจุญุงุฌุฉ ุฅู„ูŠู‡ุง ุฌู…ูŠุนู‹ุง ุŒ ู„ุง ุฃุนุฑู ุŒ ูˆู„ูƒู† ูŠุฌุจ ุฑุคูŠุชู‡ุง. ูˆู„ูƒู† ุจูุถู„ ุญู‚ูŠู‚ุฉ ูˆุฌูˆุฏ ุดูŠุก ู…ุซู„ vue-cli ุŒ ูŠู…ูƒู† ุชุนุจุฆุฉ ูƒู„ ุดูŠุก ุจูƒู„ ุจุณุงุทุฉ. ุงู„ุขู† ู†ุญู† ู†ุญุฒู… ูƒู„ ุดูŠุก:


 npm run build 

ุจุนุฏ ุฐู„ูƒ ุŒ ุณูŠูƒูˆู† ู„ุฏูŠู†ุง ุงู„ู…ุฌู„ุฏ "dist" ูˆุงู„ู…ู„ู "index.html" ููŠ "k8s-nodeport-gen / client". ูˆู„ู„ุนู…ู„ ู†ุญู† ุจุญุงุฌุฉ ู„ู‡ู… ูู‚ุท. ู‡ุฐุง ุŒ ู…ู† ุงู„ู†ุงุญูŠุฉ ุงู„ู†ุธุฑูŠุฉ ุŒ ู„ูƒูŠ ุชุนู…ู„ ุงู„ูˆุงุฌู‡ุฉ ุงู„ุฃู…ุงู…ูŠุฉ ุŒ ุชุญุชุงุฌ ุฅู„ู‰ ู†ูˆุน ู…ู† ุฎุงุฏู… http. ูˆู„ูƒู† ููŠ ู‡ุฐู‡ ุงู„ุญุงู„ุฉ ุŒ ู‡ู†ุงูƒ ุฃูŠุถู‹ุง ุฎู„ููŠุฉ ุŒ ูˆุงู„ุชูŠ ูŠุฌุจ ุฃู† ุชุนู…ู„ ุฃูŠุถู‹ุง. ู„ุฐู„ูƒ ุŒ ููŠ ุญุงู„ุชูŠ ุŒ ูƒุฎุงุฏู… http ุŒ ุณูŠุนู…ู„ Express node.js.
ุณุชูˆุถุน ุงู„ู…ู„ูุงุช ู„ุงุญู‚ู‹ุง ููŠ ู…ุฌู„ุฏ k8s-nodeport-gen / public. ู„ู„ู‚ูŠุงู… ุจุฐู„ูƒ ุŒ ู‚ู… ุจุฅุถุงูุฉ ุงู„ุฎูŠุงุฑ ุฅู„ู‰ server / index.js


 app.use(express.static(__dirname + '/public')) 

ุงู„ุขู† ุจุนุฏ ุฃู† ู‚ู…ุช ุจุชุญู„ูŠู„ ุงู„ู…ู„ูุงุช ุŒ ูŠู…ูƒู†ูƒ ุฅู†ุดุงุก ู…ู„ู Dockerfile. ู†ุญู† ู…ู† ุงู„ูˆุงุฌู‡ุฉ ุงู„ุฃู…ุงู…ูŠุฉ ู†ุญุชุงุฌ ูู‚ุท ุฅู„ู‰ ุฅู†ุดุงุก ู…ู„ูุงุช ู„ู„ู…ุฌู„ุฏ "dist". ู„ู„ู‚ูŠุงู… ุจุฐู„ูƒ ุŒ ุณูˆู ู†ุณุชุฎุฏู… ุดูŠุก ุฌุฏูŠุฏ ู…ุซู„ ุจู†ุงุก ู…ุชุนุฏุฏ ุงู„ู…ุฑุงุญู„ .


 FROM node:10-alpine AS base COPY client /portgen/client COPY server /portgen/server WORKDIR /portgen RUN cd client && npm i && npm run build FROM node:10-alpine WORKDIR /portgen COPY server/index.js /portgen/index.js COPY server/package.json /portgen/package.json COPY --from=base /portgen/client/dist ./public RUN npm i CMD ["/usr/local/bin/node", "/portgen/index.js"] 

ุฃูŠ ููŠ ุงู„ุญุงูˆูŠุฉ ุงู„ุฃูˆู„ู‰ ุŒ ู‚ู… ุจุชุดุบูŠู„ "npm run build" ุŒ ูˆููŠ ุงู„ุญุงูˆูŠุฉ ุงู„ุซุงู†ูŠุฉ ุŒ ุงู†ุณุฎ ุงู„ู…ู„ูุงุช ู…ู† "dist" ุฅู„ู‰ "public". ููŠ ุงู„ู†ู‡ุงูŠุฉ ู†ุญุตู„ ุนู„ู‰ ุตูˆุฑุฉ 95 ู…ูŠุฌุง ุจุงูŠุช.
ุงู„ุขู† ู„ุฏูŠู†ุง ุตูˆุฑุฉ ุนุงู…ู„ ู…ูŠู†ุงุก ู‚ู…ุช ุจุชุญู…ูŠู„ู‡ุง ุนู„ู‰ hub.docker.com .


ุฅุทู„ุงู‚


ุงู„ุขู† ู†ุฑูŠุฏ ุชุดุบูŠู„ ู‡ุฐู‡ ุงู„ุตูˆุฑุฉ ููŠ kubernetes'e ุŒ ุจุงู„ุฅุถุงูุฉ ุฅู„ู‰ ุฐู„ูƒ ุŒ ู†ุญุชุงุฌ ุฅู„ู‰ ุฑู…ุฒ ู…ู…ูŠุฒ ูŠู…ูƒู†ู‡ ู…ุนุฑูุฉ ุฃูŠ ุงู„ู…ู†ุงูุฐ ู…ุณุชุฎุฏู…ุฉ ุจุงู„ูุนู„ ุนุจุฑ kubernetes api.


ู„ู„ู‚ูŠุงู… ุจุฐู„ูƒ ุŒ ุชุญุชุงุฌ ุฅู„ู‰ ุฅู†ุดุงุก ุญุณุงุจ ุฎุงุฏู… ูˆุฏูˆุฑ (ูŠู…ูƒู†ูƒ ุงุณุชุฎุฏุงู… ุญุณุงุจ ู…ูˆุฌูˆุฏ) ูˆุชุฌู„ูŠุฏ ุงู„ุฃุฏูˆุงุฑ (ู„ุง ุฃุนุฑู ูƒูŠููŠุฉ ุงู„ุชุฑุฌู…ุฉ ุจุดูƒู„ ุตุญูŠุญ).
ู„ุฏูŠ ุจุงู„ูุนู„ ุฏูˆุฑ ู…ุฌู…ูˆุนุฉ "ุนุฑุถ" ููŠ ุงู„ูƒุชู„ุฉ


 ceku@ceku1> kubectl describe clusterrole view Name: view Labels: kubernetes.io/bootstrapping=rbac-defaults Annotations: rbac.authorization.kubernetes.io/autoupdate=true PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- bindings [] [] [get list watch] configmaps [] [] [get list watch] endpoints [] [] [get list watch] events [] [] [get list watch] limitranges [] [] [get list watch] namespaces [] [] [get list watch] namespaces/status [] [] [get list watch] persistentvolumeclaims [] [] [get list watch] pods [] [] [get list watch] pods/log [] [] [get list watch] pods/status [] [] [get list watch] replicationcontrollers [] [] [get list watch] replicationcontrollers/scale [] [] [get list watch] replicationcontrollers/status [] [] [get list watch] resourcequotas [] [] [get list watch] resourcequotas/status [] [] [get list watch] serviceaccounts [] [] [get list watch] services [] [] [get list watch] daemonsets.apps [] [] [get list watch] deployments.apps [] [] [get list watch] deployments.apps/scale [] [] [get list watch] replicasets.apps [] [] [get list watch] replicasets.apps/scale [] [] [get list watch] statefulsets.apps [] [] [get list watch] horizontalpodautoscalers.autoscaling [] [] [get list watch] cronjobs.batch [] [] [get list watch] jobs.batch [] [] [get list watch] daemonsets.extensions [] [] [get list watch] deployments.extensions [] [] [get list watch] deployments.extensions/scale [] [] [get list watch] ingresses.extensions [] [] [get list watch] networkpolicies.extensions [] [] [get list watch] replicasets.extensions [] [] [get list watch] replicasets.extensions/scale [] [] [get list watch] replicationcontrollers.extensions/scale [] [] [get list watch] networkpolicies.networking.k8s.io [] [] [get list watch] poddisruptionbudgets.policy [] [] [get list watch] 

ุงู„ุขู† ู‚ู… ุจุฅู†ุดุงุก ุญุณุงุจ ูˆุชุฌู„ูŠุฏ
account_portng.yml:


 apiVersion: v1 kind: ServiceAccount metadata: name: portng-service-get namespace: internal labels: k8s-app: portng-service-get kubernetes.io/cluster-service: "true" 

rolebindng_portng.yml:


 kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: internal name: view labels: k8s-app: portng-service-get kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile subjects: - kind: ServiceAccount name: portng-service-get namespace: kube-system apiGroup: "" roleRef: kind: ClusterRole name: view apiGroup: "" 

ุงู„ุขู† ู„ุฏูŠู†ุง ุญุณุงุจ ูˆู„ุฏูŠู‡ ุฑู…ุฒ ู…ู…ูŠุฒ. ุงุณู…ู‡ุง ู…ูƒุชูˆุจ ููŠ ุงู„ุญุณุงุจ:


 ceku@ceku1 /a/r/aditointernprod.aditosoftware.local> kubectl get serviceaccount portng-service-get -n internal -o yaml apiVersion: v1 kind: ServiceAccount metadata: creationTimestamp: 2018-08-02T07:31:54Z labels: k8s-app: portng-service-get kubernetes.io/cluster-service: "true" name: portng-service-get namespace: internal resourceVersion: "7270593" selfLink: /api/v1/namespaces/internal/serviceaccounts/portng-service-get uid: 2153dfa0-9626-11e8-aaa3-ac1f6b664c1c secrets: - name: portng-service-get-token-vr5bj 

ุงู„ุขู† ุชุญุชุงุฌ ูู‚ุท ุฅู„ู‰ ูƒุชุงุจุฉ ุงู„ู†ุดุฑ ุŒ ุงู„ุฎุฏู…ุฉ ุŒ ุงู„ุฏุฎูˆู„ ู„ู„ุตูุญุฉ. ู„ู†ุจุฏุฃ:
loy_portng.yml


 apiVersion: apps/v1beta1 # for versions before 1.6.0 use extensions/v1beta1 kind: Deployment metadata: namespace: internal name: portng.server.local spec: replicas: 1 template: metadata: labels: app: portng.server.local spec: serviceAccountName: portng-service-get containers: - name: portgen image: de1m/k8s-nodeport-gen env: - name: K8SURL value: ceku.server.local - name: K8SPORT value: '6443' - name: K8STIMEOUT value: '30' - name: RESSPATH value: '/api/v1/services' - name: K8SPORTSTART value: '30000' - name: K8SPORTEND value: '32000' - name: PORT value: '8080' args: - /bin/sh - -c - export K8STOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) && node /portgen/index.js 

ู‡ู†ุงูƒ ุดูŠุฆุงู† ูŠุฌุจ ุงู„ุงู†ุชุจุงู‡ ุฅู„ูŠู‡ู…ุง: "serviceAccountName: portng-service-get" ูˆุงู„ุฑู…ุฒ ุงู„ู…ู…ูŠุฒ ู„ู€ kubernetes ุŒ ุฃูˆ ุจุงู„ุฃุญุฑู‰ ุŒ ุงู„ุทุฑูŠู‚ุฉ ุงู„ุชูŠ ุฃุถูุชู‡ุง ุฅู„ูŠู‡.


ุงู„ุขู† ุฏุนู†ุง ู†ูƒุชุจ ุฎุฏู…ุฉ:
svc_portng.yml


 apiVersion: v1 kind: Service metadata: name: portng-server-local namespace: internal spec: ports: - name: http port: 8080 targetPort: 8080 selector: app: portng.server.local 

ูˆุงู„ุฏุฎูˆู„ ุŒ ู„ุฐู„ูƒ ูŠุฌุจ ุฃู† ูŠูƒูˆู† ู„ุฏูŠูƒ ุฌู‡ุงุฒ ุชุญูƒู… ุฏุฎูˆู„ ู…ุซุจุช
ingress_portng.yaml:


 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: portng.aditosoftware.local namespace: internal annotations: kubernetes.io/ingress.class: "internal" spec: rules: - host: portng.server.local http: paths: - path: / backend: serviceName: portng-server-local servicePort: 8080 

ูƒู„ ุดูŠุก ุŒ ูŠุจู‚ู‰ ูู‚ุท ู„ุชุญู…ูŠู„ ุงู„ู…ู„ูุงุช ุฅู„ู‰ ุงู„ุฎุงุฏู… ูˆุชุดุบูŠู„ู‡ุง.
ูŠู…ูƒู† ุฅุทู„ุงู‚ ูƒู„ ู‡ุฐุง ูƒุญุงูˆูŠุฉ ุนุงู…ู„ ู…ูŠู†ุงุก ูˆุญุชู‰ ุจุฏูˆู†ู‡ ุŒ ูˆู„ูƒู† ุงู„ุฌุฒุก ุงู„ุฐูŠ ูŠุญุชูˆูŠ ุนู„ู‰ ุญุณุงุจุงุช ููŠ kubernetes'e ู„ุง ูŠุฒุงู„ ูŠุชุนูŠู† ุนู„ูŠู‡ ุงู„ู…ุถูŠ ู‚ุฏู…ู‹ุง.


ุงู„ู…ูˆุงุฑุฏ:


ุตูˆุฑุฉ ุนุงู…ู„ ุงู„ู…ูŠู†ุงุก ููŠ hub.docker.com
ู…ุณุชูˆุฏุน ุจูˆุงุจุฉ ุนู„ู‰ github.com


ูƒู…ุง ุชุฑู‰ ุŒ ู„ุง ูŠูˆุฌุฏ ุดูŠุก ุฎุงุต ููŠ ู‡ุฐู‡ ุงู„ู…ู‚ุงู„ุฉ ุŒ ูˆู„ูƒู† ุจุงู„ู†ุณุจุฉ ู„ู„ุจุนุถ ุฃุนุชู‚ุฏ ุฃู†ู‡ ุณูŠูƒูˆู† ู…ุซูŠุฑุงู‹ ู„ู„ุงู‡ุชู…ุงู….

Source: https://habr.com/ru/post/ar419033/


All Articles