kubernetes:访问 Pod 内的 Ingress

bri*_*San 6 kubernetes

我设置了一个对象,根据路径Ingress将流量路由到适当的位置。我想在另一个. 我想知道这是否可能?ServiceUrlIngressPod

我尝试设置一个ServiceIngress似乎不起作用。

pea*_*ake 10

因此,无论出于何种原因(SSR、大量微服务等),您都希望使用其入口路径映射来访问 k8s 资源,而不是通过其内部名称来调用每个服务。例如,您有一个像这样的入口配置:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /api/users/?(.*)
            backend:
              serviceName: auth-service
              servicePort: 80
          - path: /api/cart/?(.*)
            backend:
              serviceName: cart-service
              servicePort: 80
Run Code Online (Sandbox Code Playgroud)

并且您想auth-service使用http://example.com/api/auth而不是访问http://auth-service

您所要做的就是将域部分(example.com在我们的例子中)替换为入口服务 url。这取决于您的配置和环境,但通常看起来像http://[SERVICE_NAME].[NAMESPACE],例如:

  • GCP-http://ingress-nginx-controller.ingress-nginx
  • Helm ingress nginx - http://my-release-ingress-nginx-controller(这里我们仅使用服务名称部分,因为 helm 在默认命名空间中安装 ingress)
  • Minikube - 如果您使用 minikube ingress 插件,那么您可能会遇到无法访问 ingress 的问题,然后只需使用 helm 版本。(不要禁用 ingress 插件 - 只需安装 helm 版本)

获取命名空间:kubectl get namespaces 获取命名空间内的服务名称kubectl get services -n [NAMESPACE]


Nic*_*Ben -1

在集群内部services,您的 Pod 用于访问其他 Pod。

客户端可以从集群外部ingress访问服务。

入口资源允许连接到服务。因此,您的 pod 需要可通过服务(以下示例中的 my-svc-N)访问,您将在入口定义中使用该服务。

看一下这个例子:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ing
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  backend:
    serviceName: default-http-backend
    servicePort: 80
  rules:
  - host: my-kube.info
    http:
      paths:
      - path: /
        backend:
          serviceName: my-svc-1
          servicePort: 80
  - host: cheeses.all
    http:
      paths:
      - path: /aaa
        backend:
          serviceName: my-svc-2
          servicePort: 80
      - path: /bbb
        backend:
          serviceName: my-svc-3
          servicePort: 80
Run Code Online (Sandbox Code Playgroud)