【问题标题】:Ingress redirect to a localhost tcp service入口重定向到 localhost tcp 服务
【发布时间】:2021-12-20 21:45:15
【问题描述】:

我有一个本地网站。 该网站是由 docker-compose 创建的,它正在侦听 localhost 端口 3000。

当我尝试时:

curl 127.0.0.1:3000

我可以看到响应。

我做了什么:

我从我的域提供商编辑了 DNS 以指向我的服务器,然后我更改了 nginx-ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: virtual-host-ingress
  namespace: ingress-basic
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/use-regex: "true"
    cert-manager.io/cluster-issuer: "letsencrypt-pp"
spec:
  tls:
  - hosts:
    - nextformulainvesting.com
    secretName: ***
  rules:
  - host: "nextformulainvesting.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: e-frontend-saleor
            port:
              number: 80

我创建了服务:

apiVersion: v1
kind: Service
metadata:
  name: e-frontend-saleor
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000

但是无论有没有服务,我都会收到错误503 Service Temporarily Unavailable

如何使用 nginx-ingress 指向我的本地 TCP 服务?

【问题讨论】:

  • 您的网站正在监听 localhost:3000,然后您将 dns 指向您的服务器(我假设服务器的外部可访问 IP 地址)。我看到这里有点脱节。这个网站是公开的还是只在 localhost(又名 127.0.0.1)上监听?
  • 我假设它已暴露,否则您将不会收到 503,这是来自 Web 服务器的有效响应。您在 Web 服务器的日志中看到任何内容吗?
  • 所以问题是服务目前没有指向任何东西,对吧?由于服务没有选择任何东西,您需要手动创建一个端点。
  • 服务器将 kubernetes 集群内的其他服务和网站暴露给互联网,因此配置良好。现在我在集群外部有一个服务,因为我没有 kubernetes 部署:我使用了 docker-compose,ancthe 网站正在监听 localhost:3000
  • 端点不能环回

标签: kubernetes nginx-ingress


【解决方案1】:

为了澄清这个问题,我发布了一个社区 wiki 答案。

this link 提供了有助于解决此问题的答案。基于此 - 案例的线索是手动为外部服务器创建一个 Service 和一个 Endpoint 对象。

之后可以创建一个 Ingress 对象,该对象将指向具有足够端口的 Service external-ip

以下是similar question 中提供的对象示例。

  • 服务和端点对象:
apiVersion: v1
kind: Service
metadata:
  name: external-ip
spec:
  ports:
  - name: app
    port: 80
    protocol: TCP
    targetPort: 5678
  clusterIP: None
  type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
  name: external-ip
subsets:
- addresses:
  - ip: 10.0.40.1
  ports:
  - name: app
    port: 5678
    protocol: TCP

  • 入口对象:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: external-service
spec:
  rules:
  - host: service.example.com
    http:
      paths:
      - backend:
          serviceName: external-ip
          servicePort: 80
        path: /

另见this reference

【讨论】:

    【解决方案2】:

    您创建的服务用于将流量转发到部署

    由于您的服务在 Kubernetes 集群之外运行,您应该在这种情况下使用 Endpoint

    apiVersion: v1
    kind: Endpoints
    metadata:
      name: my-service
    subsets:
      - addresses:
          - IP: <External IP>
        ports:
          - port: 3000
    

    您可以使用此端点进入入口,以便路由流量。

    入口

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: virtual-host-ingress
      namespace: ingress-basic
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/ssl-redirect: "true"
        nginx.ingress.kubernetes.io/use-regex: "true"
        cert-manager.io/cluster-issuer: "letsencrypt-pp"
    spec:
      tls:
      - hosts:
        - nextformulainvesting.com
        secretName: ***
      rules:
      - host: "nextformulainvesting.com"
        http:
          paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: my-service
                port:
                  number: 3000
    

    【讨论】:

    • 端点无效:subsets[0].addresses[0].ip:无效值:“127.0.0.1”:可能不在环回范围内(127.0.0.0/8)跨度>
    • 使用主机IP代替127.0.0.1。 github.com/kubernetes/minikube/issues/…
    • 我有 ip 并且 curl 没问题。所以我改变了入口,但同样的 503 服务暂时不可用。可能是因为在入口中它被定义为 SERVICE 但我有一个端点?
    • 我什至创建了服务,但结果相同。 apiVersion:v1 种类:服务元数据:名称:e-dashboard-saleor 命名空间:默认标签:app:e-dashboard-saleor 规范:选择器:app:e-dashboard-saleor clusterIP:无端口:-名称:app-dashboard- seleor port: 9000 # 实际上并不重要 --- apiVersion: v1 kind: Endpoints metadata: name: e-dashboard-saleor subsets: - address: - ip: 172.22.0.1 ports: - port: 9000 name: app-dashboard -seleor 9000 而不是 3000 并且卷曲没问题
    猜你喜欢
    • 2022-01-22
    • 2017-10-07
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 2017-09-19
    • 1970-01-01
    相关资源
    最近更新 更多