Сеть Kubernates: мой внешний интерфейс не может достигнуть внутреннего интерфейса - PullRequest
1 голос
/ 24 июня 2019

У меня есть следующий файл docker-compose, который отлично работает:

version: '3'
services:
myfrontend: 
  image: myregistry.azurecr.io/im1:latest
  container_name: myfrontend
   ports:
  - 80:80
  - 443:443

 mybackend:
image: myregistry.azurecr.io/im2:latest
container_name: mybackend
expose: 
  - 8080

Бэкэнд предоставляет только 8080 для внутренней сети, у внешнего интерфейса есть модовое изображение nginx со следующей конфигурацией (и он работает, когда докер разрешает ip с именем контейнера)

server {
listen 80 default_server;
location / {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;

    resolver 127.0.0.11 ipv6=off;

    set $springboot "http://mybackend:8080";
    proxy_pass $springboot;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Я перенес вышеупомянутую конфигурацию в kubernates и получаю ошибку 502 bad gateway от nginx, я думаю, потому что она не может решить адрес бэкенда.

Вот конф Кубернэйтс, вы можете взглянуть на него и сказать, что я делаю не так? (

apiVersion: apps/v1beta1
kind: Deployment
metadata:
 name: mybackend
spec:
 replicas: 1
 strategy:
   rollingUpdate:
    maxSurge: 1
    maxUnavailable: 1
  minReadySeconds: 5
 template:
   metadata:
  labels:
    app: mybackend
spec:
  nodeSelector:
    "beta.kubernetes.io/os": linux
  containers:
  - name: mybackend
    image: myregistry.azurecr.io/sgr-mybackend:latest
    ports:
    - containerPort: 8080
      name: mybackend
    resources:
      requests:
        cpu: 250m
        limits:
          cpu: 500m
---
apiVersion: v1
kind: Service
metadata:
  name: mybackend
spec:
  ports:
  - port: 8080
  selector:
    app: mybackend
 ---
 apiVersion: apps/v1beta1
 kind: Deployment
 metadata:
 name: myfrontend
 spec:
   replicas: 1 
 template:
 metadata:
  labels:
    app: myfrontend
 spec:
  nodeSelector:
    "beta.kubernetes.io/os": linux
  containers:
  - name: myfrontend
    image: myregistry.azurecr.io/myfrontend:latest
    ports:
    - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: myfrontend
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: myfrontend

1 Ответ

1 голос
/ 24 июня 2019

вам нужно установить для вашего преобразователя следующее:

kube-dns.kube-system.svc.cluster.local

чтобы имя \ адрес kube-dns в вашем кластере, потому что ничто на localhost не разрешило бы mybackend к его IP-адресу.Я не уверен, что вам это нужно вообще, потому что контейнер все равно узнает адрес бэкенда от kubernetes.Я бы, наверное, сбросил этот параметр

...