首页 > 解决方案 > 入口重定向到 localhost tcp 服务

问题描述

我有一个本地网站。该网站是由 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 服务?

标签: kubernetesnginx-ingress

解决方案


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

此链接提供了有助于解决此问题的答案。基于此-案例的线索是为外部服务器手动创建服务和端点对象。

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

以下是类似问题中提供的对象示例。

  • 服务和端点对象:
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: /

另请参阅此参考资料


推荐阅读