【问题标题】:Kubernates network: my frontend cannot reach backendKubernetes 网络:我的前端无法访问后端
【发布时间】:2019-06-24 11:18:41
【问题描述】:

我有以下运行良好的 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 镜像,配置如下(它的工作原理是 docker 使用容器名称解析 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 中,我从 nginx 收到 502 bad gateway 错误,我认为是因为它无法解决后端地址。

这是 kubernates conf,你能看一下并告诉我我做错了什么吗? :(

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

【问题讨论】:

    标签: azure docker kubernetes azure-aks


    【解决方案1】:

    您需要将解析器设置为:

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

    所以集群中的 kube-dns 名称\地址,因为 localhost 上的任何内容都不会将 mybackend 解析为其 IP 地址。我不确定你是否需要这个,因为无论如何容器都会知道来自 kubernetes 的后端地址。我可能会放弃该设置

    【讨论】:

    • 这意味着问题不在于地址,很可能。您可以使用“前端”窗格中的ping backend 轻松测试它。它将为后端 pod 返回正确的 IP
    • 我的错,kubernates 没有更新图像,因为我用标签 latest 刷新了!它适用于 :)
    猜你喜欢
    • 2022-01-15
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2018-03-26
    • 2017-05-19
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多