Kubernetes 阻止混合活动内容

Posted

技术标签:

【中文标题】Kubernetes 阻止混合活动内容【英文标题】:Kubernetes Blocked Mixed Active Content 【发布时间】:2019-06-09 03:52:39 【问题描述】:

问题:

在使用 K8 的 [Kubernetes] 进行开发时,我遇到了一个问题,即我的 Ingress/nginx 似乎阻止我的客户端(React)从我的 API(Flask/Python)中提取数据。

详情:

客户端和 API 之间的连接是使用环境变量来促进的,为了这篇文章,我们将其称为 API_URL。使用API_URL 以便客户端知道哪些 API 路由到 GET 和 POST。

在开发中使用 K8 的 Minikube 上,提供的 Minikube IP 根据我的理解强制 https(或者它可能是 ingress/nginx?)。 API_URL 环境变量值为value: api-cluster-ip-service。但是,当我访问开发站点时,它显示此值已分配给 http://localhost(非 https)

这导致:阻止加载混合活动内容“http://localhost/server/stuff”。结果,我无法从我的 API 中提取任何内容。

问题:

对此有推荐的方法吗?也许是一种在 dev 上关闭 https 的方法(我什至不知道这是否可能)?或者也许我需要本地主机的证书?我对 Kubernetes 还很陌生,因此非常感谢任何帮助!

Ingress-server.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: client-cluster-ip-service
              servicePort: 3000
          - path: /api/
            backend:
              serviceName: server-cluster-ip-service
              servicePort: 5000

入口命名空间输出

kubectl get ing --all-namespaces
default     ingress-service   *       10.0.2.15   80      4d21h

【问题讨论】:

你能分享你的入口yaml吗? @Crou 是的!在编辑中添加 @dizzy 你是如何部署入口控制器的? @dizzy kubectl get ing --all-namespaces @dizzy,您是否尝试过在 .yaml 中指定 host?您也可以禁用重定向添加注释nginx.ingress.kubernetes.io/ssl-redirect: "false" 【参考方案1】:

我找到了我的问题的原因......并且错误消息相当具有误导性。在本地环境中,我的客户端通过http://localhost/api/ 与我的 API 对话。但是,我意识到因为我在 Minikube 上,它不再在 localhost 上(因为 Minikube 有它自己的 IP)。一旦我将我的 API_URL 更改为 http://,它就会立即开始工作。

这里唯一的挑战是 minikube 在停止时会在每次刷新时更改 IP,这意味着我需要每次获取 IP 并更新 API_URL。但是,这是一个单独的问题/答案。

总结:

将我的 API_URL 从 http://localhost 更改为 Minikube IP。立即开始工作。

【讨论】:

以上是关于Kubernetes 阻止混合活动内容的主要内容,如果未能解决你的问题,请参考以下文章

了解kubernates对象(第三集)

Kubernates Ingress 配置证书

Kubernetes 实战 -- 泛 kubernates 导论

kubernates 学习笔记

kubernates 是什么(第一集)

云原生技术kubernates 是什么(第一集)