【问题标题】:Kubernetes redirect front-end to back-endKubernetes 将前端重定向到后端
【发布时间】:2022-01-19 17:00:30
【问题描述】:

在 Kubernetes 中,我有一个负载均衡器和 2 个 Web 应用程序(名称为 UIKuard),它们都通过服务和入口规则公开可用,类似于:

库尔德服务:

apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |xxx
  creationTimestamp: "2022-01-17T15:44:30Z"
  labels:
    app: kuard
    app.kubernetes.io/managed-by: pulumi
  name: mykuard
  namespace: nginx-test-frwjnfp0
  resourceVersion: "975"
  uid: 819d94ca-b63d-44d5-9af9-a83da3f4bbd8
spec:
  clusterIP: 10.3.250.8
  clusterIPs:
  - 10.3.250.8
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - port: 8080
    protocol: TCP
    targetPort: http
  selector:
    app: kuard
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

库尔德入口

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: | xxx
    kubernetes.io/ingress.class: nginx
    pulumi.com/autonamed: "true"
  creationTimestamp: "2022-01-17T15:44:42Z"
  generation: 2
  labels:
    app: kuard
    app.kubernetes.io/managed-by: pulumi
  name: kuard-tuy3sb0v
  namespace: nginx-test-frwjnfp0
  resourceVersion: "13091"
  uid: 4d14f3fc-d116-4233-a717-c38d92741139
spec:
  rules:
  - host: kuard.xxx.com
    http:
      paths:
      - backend:
          service:
            name: mykuard
            port:
              name: http
        path: /
        pathType: ImplementationSpecific
status:
  loadBalancer:
    ingress:
    - ip: xxx

正如你现在看到的,我可以通过转到kuard.xxx.com 访问 Kuard 应用程序,其中 xxx 是公共 LB IP。

目前,我可以通过在我的 UI 应用程序中硬编码 kuard.xxx.comUI 应用程序导航到 Kuard 应用程序。这很愚蠢,因为我使用的是 WWW 地址而不是内部集群地址。

我可以使用哪个 URL(和入口?)以便根据 UI 应用程序的内部集群地址而不是 WWW URL 在浏览器中打开 Kuard 应用程序?

我尝试在“UI”网络应用程序中硬编码http://mykuard:80,因为Kuard 应用程序的服务名称是mykuard,但我肯定遗漏了一些东西。

【问题讨论】:

  • 只有当您的“Kuard”应用程序本身需要访问 UI 时,您才能这样做。如果客户端(最终用户)需要访问 UI,他们需要通过入口访问它,因为那是集群的外部入口点。 http://mykuard:80 对于集群间通信是正确的。
  • 在ui中包含kuard作为iframe怎么样?
  • 我不知道你为什么认为通过入口路由访问 Kuard 服务是“愚蠢的”。 Ingress 是将服务暴露给外部客户端,如浏览器(和 iframe),而内部集群地址用于其他 Pod 直接给每个 Kuard。如果您的“UI”应用程序在 Nginx 或其他东西上运行,那么您可以通过它代理流量,例如ui.xxx.com/kuard -> http://mykuard:80
  • 好的,谢谢你的解释。有关如何设置此类代理的任何提示?

标签: nginx kubernetes service kubernetes-ingress


【解决方案1】:

你想要的都是不可能的。

从浏览器访问服务时,您是从集群外部发出请求。为此,您需要外部 IP。

内部集群地址 (<service-name>:<port>) 仅用于内部通信(例如 pod 到 pod),由您的内部 DNS 解析,您的浏览器无法访问该地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 2011-08-18
    相关资源
    最近更新 更多