• 添加 Kubernetes ConfigMap配置来自定义端口与服务的映射关系

    • 配置文件, 有二个在默认空间下web服务和api服务分别映射到自定义端口 9001, 9002

       apiVersion: v1
      kind: ConfigMap
      metadata:
      name: mysite-configmap
      data:
      9000: "default/web:8080"
      9001: "default/api:8080"
    • 在kubernetes Master服务器应用 ConfigMap 配置
      kubectl apply -f mysite-configmap.yml
  • 配置 Default Backend
    • kind: Deployment
      apiVersion: extensions/v1beta1
      metadata:
      name: default-http-backend
      spec:
      revisionHistoryLimit: 10
      replicas: 1
      template:
      metadata:
      labels:
      app: default-http-backend
      spec:
      terminationGracePeriodSeconds: 60
      containers:
      - name: default-http-backend
      # Any image is permissable as long as:
      # 1. It serves a 404 page at /
      # 2. It serves 200 on a /healthz endpoint
      image: defaultbackend:1.0
      livenessProbe:
      httpGet:
      path: /healthz
      port: 8080
      scheme: HTTP
      initialDelaySeconds: 30
      timeoutSeconds: 5
      ports:
      - containerPort: 8080
      resources:
      limits:
      cpu: 10m
      memory: 20Mi
      requests:
      cpu: 10m
      memory: 20Mi
      kubectl apply -f default-backend-deployment.yml
      ---
      
      apiVersion: v1
      kind: Service
      metadata:
      name: default-http-backend
      labels:
      app: default-http-backend
      spec:
      ports:
      - port: 8080
      protocol: TCP
      targetPort: 8080
      selector:
      app: default-http-backend
      kubectl apply -f default-backend-service.yml
  • 配置Ingress
    • 配置 Ingress Deployment, 暴露自定义的端口, 并指定 tcp-services-configmap 来导入我们在上一步配置的端口映射

      • 配置文件,

         apiVersion: extensions/v1beta1
        kind: Deployment
        metadata:
        name: nginx-ingress-deployment
        labels:
        k8s-app: nginx-ingress-lb
        spec:
        revisionHistoryLimit: 10
        replicas: 1
        template:
        metadata:
        labels:
        k8s-app: nginx-ingress-lb
        name: nginx-ingress-lb
        spec:
        terminationGracePeriodSeconds: 60
        containers:
        - image: nginx-ingress-controller:0.8.3
        name: nginx-ingress-lb
        imagePullPolicy: Always
        readinessProbe:
        httpGet:
        path: /healthz
        port: 10254
        scheme: HTTP
        livenessProbe:
        httpGet:
        path: /healthz
        port: 10254
        scheme: HTTP
        initialDelaySeconds: 10
        timeoutSeconds: 1
        # use downward API
        env:
        - name: POD_NAME
        valueFrom:
        fieldRef:
        fieldPath: metadata.name
        - name: POD_NAMESPACE
        valueFrom:
        fieldRef:
        fieldPath: metadata.namespace
        ports:
        - containerPort: 9000
        protocol: TCP
        - containerPort: 9001
        protocol: TCP args:
        - /nginx-ingress-controller
        - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
        - --tcp-services-configmap=$(POD_NAMESPACE)/mysite-configmap
      • 应用配置
        kubectl apply -f nginx-ingress-deployment.yml
    • 配置 Ingress Service, 配置自定义端口与ConfigMap的端口映射关系及服务名称 
      • 配置文件

         ---
        
         apiVersion: v1
        kind: Service
        metadata:
        name: nginx-ingress-lb
        labels:
        k8s-app: nginx-ingress-lb
        spec:
        type: NodePort
        ports:
        - port: 9000
        protocol: TCP
        targetPort: 9000
        nodePort: 30005
        name: web
        - port: 9001
        protocol: TCP
        targetPort: 9001
        nodePort: 30006
        name: api selector:
        k8s-app: nginx-ingress-lb
      • 应用配置
        kubectl apply -f nginx-ingress-service.yml
  • 配置Nginx 反向代理
    • 添加 Upstream 配置

       upstream web {
      server my-server-1:3005 max_fails=1 fail_timeout=10s;
      server my-server-2:3005 max_fails=1 fail_timeout=10s;
      } upstream api {
      server my-server-1:3006 max_fails=1 fail_timeout=10s;
      server my-server-2:3006 max_fails=1 fail_timeout=10s;
      } server {
      listen 80;
      listen 443 ssl; ssl_certificate /etc/nginx/conf.d/cert/wildcard.mysite.pem;
      ssl_certificate_key /etc/nginx/conf.d/cert/wildcard.mysite.key;
      location / {
      proxy_pass http://web;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      } location ~^/(api) {
      proxy_pass http://api;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; if ($http_origin ~* (^(https?://(?:.+\.)?mysite\.com)$)) {
      set $cors "CORS";
      set $cors_method "${cors}_${request_method}";
      } if ($cors_method = "CORS_OPTIONS") {
      add_header 'Access-Control-Allow-Origin' '$http_origin';
      add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
      #
      # Custom headers and headers various browsers *should* be OK with but aren't
      #
      add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
      #
      # Tell client that this pre-flight info is valid for 20 days
      #
      add_header 'Access-Control-Max-Age' 1728000;
      add_header 'Content-Type' 'text/plain charset=UTF-8';
      add_header 'Content-Length' 0;
      return 204;
      } if ($cors = "CORS") {
      add_header 'Access-Control-Allow-Origin' '$http_origin';
      add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
      add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
      }
      }
      }

Kubernetes - 配置Nginx-Ingress 作为服务发现的更多相关文章

  1. kubernetes 简介:kube-dns 和服务发现

    服务发现 kubernetes 提供了 service 的概念可以通过 VIP 访问 pod 提供的服务,但是在使用的时候还有一个问题:怎么知道某个应用的 VIP?比如我们有两个应用,一个 app,一 ...

  2. 15、基于consul+consul-template+registrator+nginx实现自动服务发现

    一.架构图 二.组件介绍 1.Registrator Registrator:一个由Go语言编写的,针对docker使用的,通过检查本机容器进程在线或者停止运行状态,去注册服务的工具.所以我们要做的实 ...

  3. Kubernetes 系列(三):Kubernetes使用Traefik Ingress暴露服务

    一.Kubernetes 服务暴露介绍 从 kubernetes 1.2 版本开始,kubernetes提供了 Ingress 对象来实现对外暴露服务:到目前为止 kubernetes 总共有三种暴露 ...

  4. Kubernetes如何使用kube-dns实现服务发现

    大纲: •       Kubernetes中如何发现服务 •       如何发现Pod提供的服务 •       如何使用Service发现服务 •       如何使用kube-dns发现服务 ...

  5. Kubernetes 部署 Nginx Ingress Controller 之 nginxinc/kubernetes-ingress

    更新:这里用的是 nginxinc/kubernetes-ingress ,还有个 kubernetes/ingress-nginx ,它们的区别见 Differences Between nginx ...

  6. kubernetes进阶(三)服务发现-coredns

    服务发现,说白了就是服务(应用)之间相互定位的过程. 服务发现需要解决的问题: 1.服务动态性强--容器在k8s中ip变化或迁移 2.更新发布频繁--版本迭代快 3.支持自动伸缩--大促或流量高峰 我 ...

  7. Kubernetes中使用ClusterDNS进行服务发现

    在k8s集群中,服务是运行在Pod中的,Pod的发现和副本间负载均衡是我们面临的问题.我们使用Service解决了负载均衡的问题,但是集群环境中,service经常伴随着ip的变动而变动,得益于kub ...

  8. nginx动态配置及服务发现那些事

    Reference: http://xiaorui.cc/2016/10/16/nginx%E5%8A%A8%E6%80%81%E9%85%8D%E7%BD%AE%E5%8F%8A%E6%9C%8D% ...

  9. Prometheus在Kubernetes下的服务发现机制

    Prometheus作为容器监控领域的事实标准,随着以Kubernetes为核心的云原生热潮的兴起,已经得到了广泛的应用部署.灵活的服务发现机制是Prometheus和Kubernetes两者得以连接 ...

  10. Kubernetes 服务发现

    目录 什么是服务发现? 环境变量 DNS 服务 Linux 中 DNS 查询原理 Kubernetes 中 DNS 查询原理 调试 DNS 服务 存根域及上游 DNS 什么是服务发现? 服务发现就是一 ...

随机推荐

  1. Avoiding memory leaks in POSIX thread programming, 多线程避免内存泄漏

    默认创建的线程为joinable的,必须调用pthread_join()才可以释放所占的内存 创建分离线程detach, attr 线程函数运行结束,调用pthread_exit 其它线程调用pthr ...

  2. OpenGL入门学习(五)

    http://developer.178.com/201103/94955548786.html 今天要讲的是三维变换的内容,课程比较枯燥.主要是因为很多函数在单独使用时都不好描述其效果,我只好在最后 ...

  3. Application binary interface and method of interfacing binary application program to digital computer

    An application binary interface includes linkage structures for interfacing a binary application pro ...

  4. ubuntu14.04LTS openssh-server 手动安装配置步骤

    先用能上网的机器下载:zlib-1.2.5.tar.bz2.openssh-5.6p1.tar.gz.openssl-0.9.8o.tar.tar,接下来,准备安装. 步骤如下: 1.首先解压安装zl ...

  5. kvm虚拟机最佳实践系列2-创建KVM及KVM优化

    创建KVM及KVM优化 把KVM优化与KVM创建放在一起,是因为我们创建的KVM是要用在生产环境中,所以基础优化工作是必备的. 创建KVM 创建系统盘, 大小: 操作系统通常都不到10G,所以系统盘2 ...

  6. c# GDI画图 双缓冲画图分析

    双缓冲绘图分析  1.Windows 绘图原理  我们在 Windows 环境下看到各种元素,如菜单.按钮.窗口.图像,从根本上说,都是“画”出来的.这时的屏幕,就相当于一块黑板,而 Windows ...

  7. DotNetCore 笔记

    最近公司框架升级到DotNetCore了,但是在用post请求的时候,发现页面的post data后台并没有接收到数据,经过调查发现,netcore用法和之前的MVC5不一样,想要接收post里的da ...

  8. 牛客网 牛客练习赛7 B.购物-STL(priority_queue)

    B.购物 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 在遥远的东方,有一家糖果专卖店 这家糖果 ...

  9. 中矿大 C 石头剪刀布【决策DP*待看/codeforces原题】

    时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 齐齐和司机正在玩剪刀石头布,不过他俩有些玩腻了,所 ...

  10. SpringCloud集群(三)

    一.构造步骤 1.进行其他的服务中心的域名映射 127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com 127.0.0.1 eureka7003.com 2 ...