入口重定向到本地主机 tcp 服务

Ingress redirect to a localhost tcp service

我有一个本地网站。 该网站是由 docker-compose 创建的,它正在侦听本地主机端口 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 服务?

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

由于您的服务 运行 在 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

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

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

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

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

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