
рдпрд╣ рдбреЙрдХрдПрдлрд╝рд┐рд▓ рдореЗрдВ vue.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреИрдХ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рдиреЛрдЯ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЪрд▓рд╛рдПрдВред
рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ
рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрд╛ рдерд╛ рдЬреЛ рдПрдХ рдореБрдлреНрдд NodePort рдирдВрдмрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╣ рдХреБрдЫ рднреА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рдмрдВрджрд░рдЧрд╛рд╣ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХреЗ рд╕рд╛рде рднрд╛рдк рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдо рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛
рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рджреЛ рднрд╛рдЧ рд╣реИрдВ - рджреГрд╢реНрдпрдкрдЯрд▓ рдФрд░ рд╕рд░реНрд╡рд░ред рдлреНрд░рдВрдЯ-рдПрдВрдб рд╕рд░реНрд╡рд░ рдХрд╛ рдиреЛрдбрдкреЙрд░реНрдЯ рдкреВрдЫрддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдЫ рдореБрдлреНрдд рдкрд╛рддрд╛ рд╣реИред
рджрд░рдЕрд╕рд▓, рдЗрд╕рдХреЗ рд▓рд┐рдП рдбреЙрдХрдЯрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдХреБрдЫ рдЪрд░ рдирд┐рдХрд╛рд▓рдиреЗ рд╣реЛрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ рдкрддрд╛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдкреА, рдкреЛрд░реНрдЯ, рдЯреЛрдХрди, рдЖрджрд┐ред
рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
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
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "k8s-nodeport-gen / client" рдореЗрдВ "dist" рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдлрд╝рд╛рдЗрд▓ "index.html" рд╣реЛрдЧрд╛ред рдФрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдпрдкрдЯрд▓ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ http рд╕рд░реНрд╡рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдмреИрдХреЗрдВрдб рднреА рд╣реИ, рдЬрд┐рд╕реЗ рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, http рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдиреЛрдб .js рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдлрд╛рдЗрд▓реЗрдВ рдмрд╛рдж рдореЗрдВ k8s-nodeport-gen / public рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдЖ рдЬрд╛рдПрдВрдЧреАред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╕рд░реНрд╡рд░ / index.js рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
app.use(express.static(__dirname + '/public'))
рдЕрдм рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкрд╛рд░реНрд╕ рд╣реЛ рдЧрдИ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдлреНрд░рдВрдЯ рд╕реЗ рдХреЗрд╡рд▓ "рдбрд┐рд╕реНрдЯ" рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдирдИ рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреИрд╕реЗ рдорд▓реНрдЯреАрд╕реНрдЯреЗрдЬ рдмрд┐рд▓реНрдб ред
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
рдпрд╣реА рд╣реИ, рдкрд╣рд▓реЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ, "рдПрдирдкреАрдПрдо рд░рди рдмрд┐рд▓реНрдб" рдЪрд▓рд╛рдПрдВ, рдФрд░ рджреВрд╕рд░реЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ, "рдбрд┐рд╕реНрдЯ" рд╕реЗ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ "рдкрдмреНрд▓рд┐рдХ" рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ 95mb рдХреА рдПрдХ рдЫрд╡рд┐ рдорд┐рд▓рддреА рд╣реИред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдбреЙрдХрдЯрд░ рдЗрдореЗрдЬ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ 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
рдЕрдм рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдирд┐рдпреЛрдЬрди, рд╕реЗрд╡рд╛, рдкреНрд░рд╡реЗрд╢ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
deploy_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" рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди, рдпрд╛ рдмрд▓реНрдХрд┐, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЬреЛрдбрд╝рд╛ред
рдЕрдм рдПрдХ рд╕реЗрд╡рд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
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
рд╕рдм рдХреБрдЫ, рдпрд╣ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
рдпрд╣ рд╕рдм рдПрдХ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рднреА рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЦрд╛рддреЛрдВ рдХреЗ рд╕рд╛рде рдЕрднреА рднреА рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рдВрд╕рд╛рдзрди:
Hub.docker.com рдкрд░ рдбреЙрдХрд░ рдЫрд╡рд┐
Gitub.com рдкрд░ Git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред