рдорд╣реАрдиреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдЕрдВрдд рдореЗрдВ рд░реВрдмреА рдХреЛ рд░реВрдмрд░реНрди рдПрдкреНрд▓реАрдХреЗрд╢рди рдкрд░ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рд░реВрдм рдПрдкреНрд▓реАрдХреЗрд╢рди рдСрди рд░реВрдм рдХреЗ рд▓рд┐рдП рдкрд╛рде-рдмреЗрд╕реНрдб рд░реВрдЯрд┐рдВрдЧ рдХреЛ рдПрдХ HAProxy Ingress рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдкреЙрдбреНрд╕ , рддреИрдирд╛рддреА , рд╕реЗрд╡рд╛рдПрдВ , рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореИрдк рдФрд░ рдЗрдирдЧреНрд░реЗрдб рдХреНрдпрд╛ рд╣реИрдВред
рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд░реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдпреВрдирд┐рдХреЙрд░реНрди / рдкреНрдпреВрдорд╛, рд╕рд╛рдЗрдбрдХреАрдХ / рдбрд┐рд▓реЗрдб-рдЬреЙрдм / рд░реЗрд╕рдХреНрдпреВ, рд╡реЗрдм рд╕реЙрдХреЗрдЯреНрд╕ рдФрд░ рдХрдИ рд╡рд┐рд╢реЗрд╖ рдПрдкреАрдЖрдИ рд╕реЗрд╡рд╛рдПрдВ рдЬреИрд╕реА рд╕реЗрд╡рд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рдереА, рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЯреНрд░реИрдлрд╝рд┐рдХ рдмрдврд╝рддрд╛ рдЧрдпрд╛, рдФрд░ URL рдпрд╛ рдкрд╛рде рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рд░реВрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рднрд╛рд░ рдХреЛ рд╕рдВрддреБрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдкрд╛рд╕ рдЯрд░реНрдирдХреА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрд▓реНрдм-рдЗрдВрдЧреНрд░реЗрд╕-рдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЕрд▓реНрдлрд╛ рд╕реНрдЯреЗрдЬ рдкрд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╣реИред
рдкрд╛рде-рдЖрдзрд╛рд░рд┐рдд рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЗрдирдЧреНрд░реЗрдб рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдерд╛ред
рд╣рдордиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ k8s рдХреЗ рдкрд╛рд╕ Ingress рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред
рд╣рдордиреЗ nginx-ingress рдФрд░ HAProxy рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ HAProxy рдкрд░ рдмрд╕реЗ - рдпрд╣ рд░реЗрд▓ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдЕрдиреБрдХреВрд▓ рд╣реИ рдЬреЛ рд╣рдордиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред
рдореИрдВ рдЖрдкрдХреЛ рдХрджрдо рджрд░ рдХрджрдо рджрд┐рдЦрд╛рддрд╛ рд╣реВрдБ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд░реЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП HAProxy рдкреНрд░рд╡реЗрд╢ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдПрдХ HAProxy рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╕рд╛рде рдПрдХ рд░реЗрд▓ рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд╛рдкрдирд╛
рдпрд╣рд╛рдБ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ:
- рдЖрдЗрдП рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рддреИрдирд╛рддреА рдХреЗ рд╕рд╛рде рдПрдХ рд░реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВред
- SSL рдХреЗ рд▓рд┐рдП рдПрдХ TLS рд░рд╣рд╕реНрдп рдмрдирд╛рдПрдБред
- рдПрдХ HAProxy рдкреНрд░рд╡реЗрд╢ рд╡рд┐рдиреНрдпрд╛рд╕ рдирдХреНрд╢рд╛ рдмрдирд╛рдПрдБред
- рдПрдХ HAProxy рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдПрдБред
- рдЪрд▓рд┐рдП рд▓реЛрдбрдмреЗрд▓рд░ рдЬреИрд╕реА рд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Ingress рдХреА рдкрд╣реБрдВрдЪ рдЦреЛрд▓реЗрдВред
- рдЖрдЗрдП рдЗрдирдЧреНрд░реЗрдб рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдбреАрдПрдирдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред
- рдкрд╛рде-рдЖрдзрд╛рд░рд┐рдд рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдирдЧреНрд░реЗрдб рдирд┐рдпрдо рдмрдирд╛рдПрдВред
- рдкрд╛рде рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЯреЗрд╕реНрдЯ рд░реВрдЯрд┐рдВрдЧред
рдЖрдЗрдП рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ - рд╡реЗрдм (рдпреВрдирд┐рдХреЙрд░реНрди), рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЯрд╛рд╕реНрдХ (рд╕рд╛рдЗрдбрдХреАрдХ), рд╡реЗрдм рд╕реЙрдХреЗрдЯ (рд░реВрдмреА рдкрддрд▓реЗ), рдПрдкреАрдЖрдИ (рдпреВрдирд┐рдХреЙрд░реНрди рд╕рдорд░реНрдкрд┐рдд) рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЗрдХрдУрд╡рд░ рдмрдирд╛рдПрдВред
рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рддреИрдирд╛рдд рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдФрд░ рд╕реЗрд╡рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИред
--- apiVersion: v1 kind: Deployment metadata: name: test-production-web labels: app: test-production-web namespace: test spec: template: metadata: labels: app: test-production-web spec: containers: - image: <your-repo>/<your-image-name>:latest name: test-production imagePullPolicy: Always env: - name: POSTGRES_HOST value: test-production-postgres - name: REDIS_HOST value: test-production-redis - name: APP_ENV value: production - name: APP_TYPE value: web - name: CLIENT value: test ports: - containerPort: 80 imagePullSecrets: - name: registrykey --- apiVersion: v1 kind: Service metadata: name: test-production-web labels: app: test-production-web namespace: test spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: test-production-web
рдпрд╣рд╛рдВ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдРрдк рдХреА рддреИрдирд╛рддреА рдФрд░ рд╕реЗрд╡рд╛ рдХрд╛ рдЦрд╛рдХрд╛ рд╣реИред
--- apiVersion: v1 kind: Deployment metadata: name: test-production-background labels: app: test-production-background namespace: test spec: template: metadata: labels: app: test-production-background spec: containers: - image: <your-repo>/<your-image-name>:latest name: test-production imagePullPolicy: Always env: - name: POSTGRES_HOST value: test-production-postgres - name: REDIS_HOST value: test-production-redis - name: APP_ENV value: production - name: APP_TYPE value: background - name: CLIENT value: test ports: - containerPort: 80 imagePullSecrets: - name: registrykey --- apiVersion: v1 kind: Service metadata: name: test-production-background labels: app: test-production-background namespace: test spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: test-production-background
рдпрд╣рд╛рдВ рдкрд░ рдореМрдЬреВрдж рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЙрдХреЗрдЯ рдФрд░ рд╕рд░реНрд╡рд┐рд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реИред
--- apiVersion: v1 kind: Deployment metadata: name: test-production-websocket labels: app: test-production-websocket namespace: test spec: template: metadata: labels: app: test-production-websocket spec: containers: - image: <your-repo>/<your-image-name>:latest name: test-production imagePullPolicy: Always env: - name: POSTGRES_HOST value: test-production-postgres - name: REDIS_HOST value: test-production-redis - name: APP_ENV value: production - name: APP_TYPE value: websocket - name: CLIENT value: test ports: - containerPort: 80 imagePullSecrets: - name: registrykey --- apiVersion: v1 kind: Service metadata: name: test-production-websocket labels: app: test-production-websocket namespace: test spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: test-production-websocket
рдпрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдкреАрдЖрдИ рддреИрдирд╛рддреА рдФрд░ рд╕реЗрд╡рд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреА рдЧрдИ рд╣реИред
--- `apiVersion: v1 kind: Deployment metadata: name: test-production-api labels: app: test-production-api namespace: test spec: template: metadata: labels: app: test-production-api spec: containers: - image: <your-repo>/<your-image-name>:latest name: test-production imagePullPolicy: Always env: - name: POSTGRES_HOST value: test-production-postgres - name: REDIS_HOST value: test-production-redis - name: APP_ENV value: production - name: APP_TYPE value: api - name: CLIENT value: test ports: - containerPort: 80 imagePullSecrets: - name: registrykey --- apiVersion: v1 kind: Service metadata: name: test-production-api labels: app: test-production-api namespace: test spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: test-production-api
рдЪрд▓реЛ kubectl apply
рд╕рд╛рде рдкреНрд░рдХрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВред
$ kubectl apply -f test-web.yml -f test-background.yml -f test-websocket.yml -f test-api.yml deployment "test-production-web" created service "test-production-web" created deployment "test-production-background" created service "test-production-background" created deployment "test-production-websocket" created service "test-production-websocket" created deployment "test-production-api" created service "test-production-api" created
рдПрдХ рдмрд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ HAProxy Ingress рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдЖрдЗрдП рдПрдХ рдПрд╕рдПрд╕рдПрд▓ рдХреБрдВрдЬреА рдФрд░ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреАрдПрд▓рдПрд╕ рд░рд╣рд╕реНрдп рдмрдирд╛рдПрдВред
рд╡рд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди URL рдХреЗ рд▓рд┐рдП HTTPS рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ L7 рдкрд░ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред
$ kubectl create secret tls tls-certificate --key server.key --cert server.pem
server.key
рдпрд╣рд╛рдБ рд╣рдорд╛рд░реА SSL рдХреБрдВрдЬреА рд╣реИ, рдФрд░ pem рдкреНрд░рд╛рд░реВрдк рдореЗрдВ server.pem
рд╣рдорд╛рд░рд╛ SSL рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╣реИред
рдЕрдм HAProxy рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдПрдВред
HAProxy рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирдХреНрд╢рд╛
рдпрд╣рд╛рдБ HAProxy рдХреЗ рд▓рд┐рдП рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд┐рдХрд▓реНрдк рджреЗрдЦреЗрдВред
apiVersion: v1 data: dynamic-scaling: "true" backend-server-slots-increment: "4" kind: ConfigMap metadata: name: haproxy-configmap namespace: test
HAProxy Ingress рдирд┐рдпрдВрддреНрд░рдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди
рдЕрдиреБрдХреНрд░рдорд┐рдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рджреЛ рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдирдЧреНрд░реЗрдб рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреИрдЯрд░реНрдиред
apiVersion: extensions/v1beta1 kind: Deployment metadata: labels: run: haproxy-ingress name: haproxy-ingress namespace: test spec: replicas: 2 selector: matchLabels: run: haproxy-ingress template: metadata: labels: run: haproxy-ingress spec: containers: - name: haproxy-ingress image: quay.io/jcmoraisjr/haproxy-ingress:v0.5-beta.1 args: - --default-backend-service=$(POD_NAMESPACE)/test-production-web - --default-ssl-certificate=$(POD_NAMESPACE)/tls-certificate - --configmap=$(POD_NAMESPACE)/haproxy-configmap - --ingress-class=haproxy ports: - name: http containerPort: 80 - name: https containerPort: 443 - name: stat containerPort: 1936 env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace
рдЗрд╕ рдкреНрд░рдХрдЯреАрдХрд░рдг рдореЗрдВ, рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
--default-backend-service
рд╡рд╣ --default-backend-service
рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрджрд┐ рдХреЛрдИ рдирд┐рдпрдо рдЕрдиреБрд░реЛрдз рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рддреЛ рдЖрд╡реЗрджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ test-production-web
, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо 404 рдкреГрд╖реНрда рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЖрдк рддрдп рдХрд░рддреЗ рд╣реИрдВред
--default-ssl-certificate
SSL рд░рд╣рд╕реНрдп рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрднреА рдмрдирд╛рдпрд╛ рд╣реИред рдпрд╣ L7 рдкрд░ рдПрд╕рдПрд╕рдПрд▓ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдЧрд╛, рдФрд░ рдЖрд╡реЗрджрди рдПрдЪрдЯреАрдЯреАрдкреАрдПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рд╣реЛрдЧрд╛ред
рд╣реИрдкреНрд░реЙрдХреНрд╕реА рдЗрдирдЧреНрд░реЗрдбреЗрд╢рди рд╕рд░реНрд╡рд┐рд╕
рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА LoadBalancer
рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╣рдорд╛рд░реЗ Ingress рдХрдВрдЯреНрд░реЛрд▓рд░ рддрдХ рдкрд╣реБрдБрдЪ рджреЗрддреА рд╣реИред
LoadBalancer рдХреЗ рдкрд╛рд╕ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ Kubernetes рдЖрдВрддрд░рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рдФрд░ L7 рдкрд░ рдпрд╣ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ Ingress рдХрдВрдЯреНрд░реЛрд▓рд░ рддрдХ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред
apiVersion: v1 kind: Service metadata: labels: run: haproxy-ingress name: haproxy-ingress namespace: test spec: type: LoadBalancer ports: - name: http port: 80 protocol: TCP targetPort: 80 - name: https port: 443 protocol: TCP targetPort: 443 - name: stat port: 1936 protocol: TCP targetPort: 1936 selector: run: haproxy-ingress
рдЖрдЗрдП рд╕рднреА HAProxy рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
$ kubectl apply -f haproxy-configmap.yml -f haproxy-deployment.yml -f haproxy-service.yml configmap "haproxy-configmap" created deployment "haproxy-ingress" created service "haproxy-ingress" created
рдЬрдм рд╕рднреА рд╕рдВрд╕рд╛рдзрди рдЪрд▓ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ LoadBalancer рдХреЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
$ kubectl -n test get svc haproxy-ingress -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR haproxy-ingress LoadBalancer 100.67.194.186 a694abcdefghi11e8bc3b0af2eb5c5d8-806901662.us-east-1.elb.amazonaws.com 80:31788/TCP,443:32274/TCP,1936:32157/TCP 2m run=ingress
DNS рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди URL рдореЗрдВ рдореИрдк рдХрд░реЗрдВ
рдЬреИрд╕реЗ рд╣реА рд╣рдо рдЗрдирдЧреНрд░реЗрдб рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП ELB рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рд╕реЗрд╡рд╛ рдХреЗ DNS рдФрд░ рдЕрдиреБрд░реЛрдз URL (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП test-rails-app.com
) рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЗрдВрдЧреНрд░реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рдкреАрдЫреЗ рд╣реИ, рдпрд╣ рдЗрдирдЧреНрд░реЗрдб рдФрд░ рдкрде-рдЖрдзрд╛рд░рд┐рдд рдирд┐рдпрдореЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
Https://test-rails-app.com рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз test-production-web
рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
Https://test-rails-app.com/websocket рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ test-production-websocket
рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
Https://test-rails-app.com/api рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз test-production-api
рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдЗрдП рдЗрди рд╕рднреА рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдирдЧреНрд░реЗрд╕ рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдмрдирд╛рдПрдВред
--- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress namespace: test spec: tls: - hosts: - test-rails-app.com secretName: tls-certificate rules: - host: test-rails-app.com http: paths: - path: / backend: serviceName: test-production-web servicePort: 80 - path: /api backend: serviceName: test-production-api servicePort: 80 - path: /websocket backend: serviceName: test-production-websocket servicePort: 80
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдирдЧреНрд░реЗрдбреЗрд╢рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рд╣реИрдВ ред
рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░рд╛ рдЯреНрд░реИрдлрд╝рд┐рдХ /
test-production-web
, /api
рд╕реЗ test-production-api
рдФрд░ /websocket
рд╕реЗ test-production-websocket
ред
рд╣рдореЗрдВ Kubernetes рдореЗрдВ L7 рдкрд░ рдкрд╛рде-рдЖрдзрд╛рд░рд┐рдд рд░реВрдЯрд┐рдВрдЧ рдФрд░ SSL рд╕рдорд╛рдкреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдФрд░ Ingress рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред