介绍:

  • Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。——Jupyter Notebook官方介绍
  • jupyterhub是多用户版本的notebook,是在jupyter notebook基础之上又提供了一层服务。直接面向jupyterhub开发,可以更方便的区分用户
  • jupyterhub for k8s,是在kubernets上运行jupyterhub,可以更方便的进行容器编排与资源调度。而这些复杂的底层操作都交给它来实现了。

nginx代理

在chrome某个版本之后,由于对iframe内跨域cookie的限制,使这里的嵌套无法调通。
于是想通过nginx配置反向代理,增加location匹配规则,配置为同域来解决这个问题。
通过这种方式,可以不需要改动jupyterhub for k8s那里的配置即可。

  location /user/ {proxy_pass http://{这里是jupyterhub for k8s的安装地址}/user/;proxy_hide_header content-security-policy;add_header Content-Security-Policy 'frame-ancestors https://我的域名' always;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-Scheme $scheme;# websocket headersproxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_redirect off;proxy_buffering off;}location /hub/ { # 这个配置只是为了取得左上角的logo,但是后面会把这个logo去掉,那就没什么用了proxy_pass http://{这里是jupyterhub for k8s的安装地址}/hub/;proxy_set_header Content-Security-Policy "frame-ancestors http://我的域名:82 http://{这里是jupyterhub for k8s的安装地址}";proxy_set_header        X-Real-IP $remote_addr;# proxy_set_header        Host $host;proxy_set_header        X-Forwarded-For $remote_addr;proxy_http_version      1.1;proxy_set_header        Upgrade $http_upgrade;proxy_set_header        Connection "upgrade";# proxy_redirect          off;}

注意listen的端口需要为80,否则编辑器是可以显示出来了,但是会提示内核无法初始化。通过控制台可以发现是因为一个post的sessions接口报404,而通过和正常访问的页面对比也没什么不同

配置ssl

注意这里的端口必须是443,否则也是无法初始化内核。

  listen 443 ssl;server_name 我的域名;ssl_certificate /etc/nginx/cert/文件名.pem;  #需要将cert-file-name.pem替换成已上传的证书文件的名称。ssl_certificate_key /etc/nginx/cert/文件名.key; #需要将cert-file-name.key替换成已上传的证书密钥文件的名称。ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;#表示使用的加密套件的类型。ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。ssl_prefer_server_ciphers on;

这样就可以解决了。

修改notebook模板

另外如果想要修改模板文件,/opt/conda/lib/python3.8/site-packages/notebook/templates下的html改动即可。

    404.htmlbrowser-open.htmledit.htmlerror.htmllogin.htmllogout.htmlnotebook.htmlpage.htmlterminal.htmltree.htmlview.html

在jupyterhub中比notebook多了一个“Control Panel”的按钮,这个按钮生成的来源在/opt/conda/lib/python3.8/site-packages/jupyterhub/singleuser/mixins.py
修改之后需要重启jupyterhub或者docker容器才能生效。

关于暂时端口使用的结论

只有默认的80端口和443端口可以,必须是http或https的默认隐式端口,其它的显式声明端口就不行。

最早的时候用nginx配,就是因为这个问题导致这个内核无法初始化。
表现出来是post/user/caoyj/api/sessions这个接口404,看发送的数据及头信息,和直接访问的数据及头也看不出区别

如果能到容器内找到这个接口的代码,解决掉这个问题也行。

解决端口限制问题

原来这一部分我以为只判断Referer,当时在nginx也配置了referer没用,因为原来判断跳转来源都是根据浏览器携带的这个参数。
这会儿在nginx中又增加了Origin和Host的配置,就可以了

proxy_set_header Referer ‘http://我的域名’;
proxy_set_header Origin ‘http://我的域名/’;
proxy_set_header Host ‘我的域名’;

按这种方式处理后,不再限制端口了.
而且上次处理后,那个“可信”还显示的“不可信”,虽然不影响使用,也能点击手动信任,并且从容器模板中也能去掉。
但是现在这样处理后直接就是可信了

项目内部iframe嵌套jupyterhub for k8s相关推荐

  1. iframe内部再次嵌套iframe禁用右击事件

    需求背景:在一个嵌套于别的项目之下的iframe中,需要实现预览pdf/视频/图片等文件,并且按权限分配是否能下载. 正常开发都已经满足需求,但是测试发现浏览器自带右击可以另存为/保存 好嘛,来解决这 ...

  2. 解决iframe嵌套项目无法登录的问题

    以iframe标签嵌入一个现有的项目到网站中,嵌入的项目无法正常登录,直接在浏览器地址栏输入url并登录是正常的.于是开始探索... 问题分析 由于后续接口提示401,判断是登录接口鉴权失败导致的,于 ...

  3. vue项目中,用iframe嵌套其他页面在IE浏览器打开空白而在谷歌打开正常的问题

    问题 在vue项目中,某个页面里面用iframe嵌套了另一个vue项目的一个页面,在谷歌浏览器中打开,iframe的内容正常显示:在ie浏览器中打开,iframe的内容是空白的,没有报错. 原因 用的 ...

  4. CMS可视化项目-iframe嵌套 token Object.keys(data).map()遍历对象包数组的数据 select下拉菜单

    iframe嵌套单页面 iframe是一个行内块元素,如果希望改变它的位置就需要转块级元素 <style>/* iframe是一个行内块元素,如果希望改变它的位置就需要转块级元素 */if ...

  5. 移动端web页面列表类上拉加载,查看详情,iframe嵌套第三方页面遇到的问题以及解决办法...

    1.移动端上拉加载 网上有很多成熟的插件,比如iscroll.在这里介绍一下用jquery和js写的上拉加载方法.使用原生的去写上拉加载更多需要三个高度去做对比,以新闻类列表举例,首先需要整个dom的 ...

  6. vue动态配置嵌套页面(含iframe嵌套)可实现白天夜间皮肤切换

    引用地址:vue动态配置嵌套页面(含iframe嵌套)可实现白天夜间皮肤切换 - 长空雁叫霜晨月 - 博客园  项目预览地址:https://volodya-01.github.io/vue2.0_t ...

  7. 使用Iframe嵌套其他系统页面遇到的跨域问题

    之前需要将一个其他的系统页面集成到现在主要使用的一个平台上,因为这个系统使用的是jsp的页面,另一个是augular的页面,并且为了保持项目的完整性和较小的改动,所以使用了iframe来将另一个页面集 ...

  8. vue中用iframe嵌套页面,点击返回实现真正的退回上一步功能

    vue项目中需要嵌套第三方的页面,但是第三方页面中的网页没有返回按钮,如图所示:此为页面b,页面a为跳到b页面的前一个页面. 点击iframe嵌套页面跳转的第二个页面 要实现不管进入多少层iframe ...

  9. 实现iframe嵌套页面通信

    实现iframe嵌套页面通信 在项目中通过iframe标签嵌入其他网页时,该如何iframe页面进行通信呢?小菜鸡在这里简单记录一下~ 1.父组件获取子组件: (注:父组件是当前项目页面,子组件是if ...

最新文章

  1. Ubuntu 18.04 固件的烧录方法
  2. MPB:中科院城环所杨军组-​​水体浮游植物采集与鉴定
  3. Mozilla 财报:2017年收入增长超过 4000 万美元
  4. 刚毕业的我,参与了一场大厂之间的争夺之战
  5. 都是月饼惹的祸 124盒月饼太甜太温柔(结尾有彩蛋)
  6. java文件中有中文,在windows下因编码不一致,而导致编译失败的处理方法。
  7. 50张神图……好不容易才找到完整版!
  8. java版 modbus crc16校验 (已测试成功)_java版 ModBus CRC16校验 (已测试成功)
  9. mybatis学习(17):列名与属性名不一致的情况(使用别名)
  10. Microsoft Visual Studio 2008从试用版转为正式版
  11. String类型直接赋值与构造赋值
  12. python内置函数下划线_python(内置函数)
  13. Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7)
  14. Day10_界面叠加处理
  15. Rust: 如何在windows环境中用Atom中玩转它?--new
  16. Jade win10 安装教程
  17. 分销商城平台开发现成源码
  18. 1995-2020年省级地级市环境污染数据集 三废排放、废气烟粉尘废水固体废物排放、空气质量AQI、空气污染物浓度PM2.5、环境投资保护治理数据
  19. python协程详解
  20. IDEA做数据库操作时的一个莫名其妙的错误

热门文章

  1. java stream api 对象复制_Java 8新特性之旅:使用Stream API处理集合
  2. 公众号内容拓展学习笔记(2021.4.8)
  3. IntelliJ IDEA怎么自动生成注释
  4. TCC88XX环境的搭建教程
  5. php qq邮箱stmp配置,PHP使用QQ邮箱发送邮件无需SMTP服务器
  6. java onetomany_Java中的OneToMany的使用方法
  7. ansible delegate_to 模块
  8. C语言编程>第二十五周 ③ 下列给定程序中,函数fun的功能是:根据输入的三个边长(整型值),判断能否构成三角形;构成的是等边三角形,还是等腰三角形。若能构成等边三角形函数返回3,若能构成……
  9. Windows对Ubuntu的远程控制,你会几种方法?
  10. 中式别墅庭院---中国人的“中式情怀!