这个服务的代理,相对于服务网关来说,有些典型,

今天调通了,作个记录。

一,nginx配置

upstream ai_ambassador {
    ip_hash;
    server 1.2.3.4:30080;
}

server {
    listen       8080;
    server_name  localhost;
    client_max_body_size 500m;
    proxy_connect_timeout    600;
    proxy_read_timeout       600;
    proxy_send_timeout       600;

    add_header 'Access-Control-Allow-Origin' '*';
    proxy_http_version 1.1;
    proxy_set_header Connection "";

    location / {
        proxy_pass  http://ai_ambassador;
        proxy_set_header Host $host;
        proxy_set_header X-Real-Scheme $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

二, zipkin

记住红线部署,不然,nginx会抱怨zipkin重定义次数太多,因为/zipkin本身的服务里使用了302跳转。

---
apiVersion: v1
kind: Service
metadata:
  name: zipkin
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v1
      kind: TracingService
      name: tracing
      service: zipkin:9411
      driver: zipkin
      ---
      apiVersion: ambassador/v1
      kind: Mapping
      name: zipkin_mapping
      prefix: /zipkin
      rewrite: /zipkin/
      service: zipkin:9411
spec:
  selector:
    app: zipkin
  ports:
  - port: 9411
    name: http
    targetPort: 9411
    # nodePort: 32764
  # type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: zipkin
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: zipkin
    spec:
      containers:
      - name: zipkin
        image: harbor.xxx.cn/3rd_part/openzipkin/zipkin:2.16
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 9411

三,指定ambassador的nodeport端口。

---
apiVersion: v1
kind: Service
metadata:
  name: ambassador
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    targetPort: 8080
    protocol: TCP
    nodePort: 30080
  selector:
    service: ambassador

四,由于要将mlfow tracking的数据放到mysql中,先建一个mysql服务(嘿嘿,由于拼写错误,ml flow tracking和ml flow tracing没分清)。由于是测试,密码随意 ,没有将数据,配置之类挂载出来。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mlflow-tracing-mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      name: mlflow-tracing-mysql
  template:
    metadata:
      labels:
        name: mlflow-tracing-mysql
    spec:
      containers:
      - name: mysql
        image: harbor.xxx.cn/3rd_part/mysql:5.7.24
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "xxxx"
---
kind: Service
apiVersion: v1
metadata:
  name: mlflow-tracing-mysql
spec:
  type: NodePort
  ports:
  - name: mlflow-tracing-mysql
    port: 3306
    targetPort: 3306
    protocol: TCP
  selector:
    name: mlflow-tracing-mysql

这一步完了,好像可能,要确认root用户可远程访问,我好像还自己建好了mlflow库,可能不建不行吧,毕竟人家是直接使用的。

如果更新了hdfs这些配置,最好也要重建数据库,因为这些配置是第一次连接时,写进数据库了,或是自己进数据库修改吧。

五,mlflow tracking配置,这是重头戏。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mlflow-tracking
spec:
  replicas: 1
  selector:
    matchLabels:
      name: mlflow-tracking
  template:
    metadata:
      labels:
        name: mlflow-tracking
    spec:
      imagePullSecrets:
      - name: harborsecret
      containers:
      - name: mlflow-tracing
        image: harbor.xxx.cn/mlflow/mlflow-tracing:v1.2
        imagePullPolicy: IfNotPresent
        # command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 360000']
        command: ['sh', '-c', 'mlflow server --backend-store-uri mysql+pymysql://root:xxx@mlflow-tracing-mysql:3306/mlflow --default-artifact-root hdfs://xxxx:8020/ml_model/mlflow --host 0.0.0.0']
        ports:
        - containerPort: 5000
        env:
        - name: MLFRACKING_TOKEN
          value: "no use"
---
kind: Service
apiVersion: v1
metadata:
  name: mlflow-tracking
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v1
      kind: Mapping
      name: mlflow_tracking_mapping
      prefix: /mlflow-tracking/
      # rewrite: /
      service: mlflow-tracking:5000
spec:
  type: NodePort
  ports:
  - name: mlflow-tracking
    port: 5000
    targetPort: 5000
    protocol: TCP
    # nodePort: 30080
  selector:
    name: mlflow-tracking

六,mlflow tracking的dockerfile肿么写的呢?look,如果条件所限,请使用http代码,如果国外慢,则pip时,使用国内镜像。

FROM harbor.xxx.cn/3rd_part/continuumio/miniconda3:4.7.10

RUN export http_proxy=http://xxx.local:8080 \
    && export https_proxy=http://xxx.local:8080 \
    && export ftp_proxy=xxx.local:8080 \
    && pip install pymysql mlflow  -i http://pypi.douban.com/simple --trusted-host pypi.douban.com \
    && conda install hdfs3 -c conda-forge \
    && conda clean -y -all \
    && rm -rf ~/.cache/pip

ENV MLFLOW_HDFS_DRIVER=libhdfs3

EXPOSE 5000:5000

七,七星连珠之后,即可访问nginx上代理的mlflow tracking服务啦。。

nginx代理ambassador,再转到mlfow-tracking服务的更多相关文章

  1. nginx代理ambassador出现426错误

    现在ambassador文档啃得差不多了.进入实战阶段. 一开始,就偶遇426错误. 网络结构大致如下: 浏览器访问nginx, nginx代理到k8s内的ambassador, ambassador ...

  2. Nginx代理实现内网主机访问公网服务

    通过Nginx代理实现内网主机访问公网和接口服务 1.需求: m2.test.com为公司测试环境的微信测试域名,因为要调用微信服务接口需要访问外网,现通过Nginx代理现实此功能. 2.环境如下: ...

  3. Nginx代理与负载均衡配置与优化

    Nginx代理 Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反 ...

  4. windows下nginx代理ftp服务器

    我所在的开发环境里,nginx和ftp在同一台服务器. ftp根目录: nginx的配置: 在nginx.conf中加入: server { listen ; server_name localhos ...

  5. Nginx代理的几种模式

    转载自一位大佬 通常我们都知道Nginx性能很高,尤其是作为一个代理服务器,因为它用的是epoll模型,就比如Python Django Web的性能不行,我们可能就会在前端加一个nginx代理,从而 ...

  6. 多级nginx代理,获取客户端真实ip

    今天服务里的微信公众号支付业务突然不能用了,报错为网络环境未能通过安全验证,请稍后再试.检查后端日志,没有任何问题,看来是成功创建支付订单,但是调起支付时出现了问题.上网查了一下,这个报错的直接原因是 ...

  7. CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解

    CAS (6) -- Nginx代理模式下浏览器访问CAS服务器网络顺序图详解 tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 nginx版本: nginx-1. ...

  8. CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解

    CAS (5) -- Nginx代理模式下浏览器访问CAS服务器配置详解 tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 nginx版本: nginx-1.9.8 ...

  9. nginx代理学习

    一.windows下nginx代理ftp服务器 我所在的开发环境里,nginx和ftp在同一台服务器. ftp根目录: nginx的配置: 在nginx.conf中加入: server { liste ...

随机推荐

  1. linux 性能调优工具参考 (linux performance tools)

    之前发现几张图对于linux使用者有着较强的参考意义,下面对其进行简单备忘: # linux 静态信息查看工具 # linux 性能测试工具 benchmark # linux 性能观测工具 # li ...

  2. tornado跨域解决方法

    代码 class BaseHandler(tornado.web.RequestHandler): # 允许跨域访问的地址 def allowMyOrigin(self): allow_list = ...

  3. Cisco pppoe上网设置

    1.配置虚拟端口: interface Dialer1 ip address negotiated ip nat outside ip virtual-reassembly in encapsulat ...

  4. AcWing 30. 正则表达式匹配 (剑指OFFER leetcode 10)

    题目描述请实现一个函数用来匹配包括’.’和’*’的正则表达式. 模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式. ...

  5. Leetcode450. 删除二叉搜索树中的节点

    思路: (1)如果root为空,返回 (2)如果当前结点root是待删除结点: a:root是叶子结点,直接删去即可 b:root左子树不为空,则找到左子树的最大值,即前驱结点,使用前驱结点代替待删除 ...

  6. 【未完成】【oracle】单引号使用问题

    ‘-’不可以用 原因:

  7. 2019CSP-J/S受虐记

    emmmm...... 今年noip很波折,我从7月开始准备 但CCF居然停了noip,这搞得我很迷茫,CCF你在干什么! 然后又恢复了,这有搞得我很懵逼?(还改名叫csp了) 就换了个名,CCF你搞 ...

  8. React: 研究React的组件化

    一.简介大概 在以往的Web开发中,会把web页面所有的复杂控件作为一个单一的整体进行开发,由于控件之间需要进行通信,因此不同的组件之间的耦合度会很多,由于开发一个控件的时候要考虑到控件与控件之间的联 ...

  9. 【swoole】结合swoole 和 nsq 的实际应用

    集合 swoole 的框架设计 为了减少理解度,我尽量的从源头开始引入 1. nsq 案例中是使用 swoole 结合一个php 框架实现的是 NSQ 订阅功能. 启动命令: sudo bash /w ...

  10. web自动化针对PO模式进行二次封装之basepage

    在PO模式当中,我们做到了页面对象与测试用例的分离,但在页面对象编写时,我们仍然还有优化的空间.页面对象有一些共同的基本操作,可以封装起来,并可以在基本操作当中加上日志和异常截图的处理.比如说我们在查 ...