开发者社区> 问答> 正文

上游服务IP更改时,Kubernetes nginx刷新IP地址

我正在使用nginx将请求代理到kubernetes集群中的StatefulSets的多个Headless服务。我现在遇到的问题是,无论何时服务IP发生变化,nginx都不会将服务端点解析为更新的IP地址,但仍然使用过时的缓存IP地址。我试图在nginx配置中使用proxy_pass中的变量,但它根本无济于事。在我的本地群集上以及部署在AWS EKS上。这是我的nginx配置的片段:

upstream svc-foo {
server svc-foo:8080;
keepalive 1024;
}
server {
resolver 127.0.0.1 [::1]:5353 valid=10s;
set $foo http://svc-foo;
location /foo/ {

proxy_pass $foo; 
proxy_http_version 1.1;

}
}
当我更新导致服务IP更改的服务时,我预计不会出现停机。

展开
收起
k8s小能手 2019-01-09 14:44:26 3288 0
1 条回答
写回答
取消 提交回答
  • 整合最优质的专家资源和技术资料,问答解疑

    最好的方法是在你的nginx pod上使用DNS sidecar,如下所示:

    apiVersion: v1
    kind: ConfigMap
    metadata:
    namespace: issue-795
    name: nginx-config
    data:
    nginx.conf: |-

    user  nginx;
    worker_processes  1;
    
    events {
      worker_connections  4096;  ## Default: 1024
    }
    
    http {
      server { # php/fastcgi
        listen 80;
        resolver 127.0.0.1:53 ipv6=off valid=10s;
        set $upstream http://backend:8080;
        location / {
              proxy_pass $upstream;
              proxy_http_version 1.1;
         }
      }
    }

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    namespace: issue-795
    name: proxy
    spec:
    replicas: 1
    template:

    metadata:
      labels:
        app: proxy
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-config
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
    2019-07-17 23:25:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
ACK 云原生弹性方案—云原生时代的加速器 立即下载
ACK集群类型选择最佳实践 立即下载
企业运维之云原生和Kubernetes 实战 立即下载

相关镜像