【问题标题】:Accessing application inside a kubernetes pod from an another application in a different pod从不同 pod 中的另一个应用程序访问 kubernetes pod 中的应用程序
【发布时间】:2022-06-16 14:21:04
【问题描述】:

我有一个 kubernetes 集群,有两个部署 ui-service-app 和 user-service-app。这两个部署都通过集群 IP 服务公开,即 ui-service-svc 和 user-service-svc。此外,还有一个入口可以从集群外部访问我在这些部署中的两个应用程序。

现在我想从 ui-service-app 内的应用程序向 user-service-app 进行 api 调用。目前我正在使用 ingress-ip/user 这样做。但是内部应该有一些方法可以做到这一点?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: user-service-app
  labels:
    app: user-service-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: user-service-app
  template:
    metadata:
      labels:
        app: user-service-app
    spec:
      containers:
      - name: user-service-app
        image: <MY-IMAGE-URL>
        imagePullPolicy: Always
        ports:
        - containerPort: 3000
        livenessProbe:
          httpGet:
            path: /ping
            port: 3000
        readinessProbe:
          httpGet:
            path: /ping
            port: 3000
          
          

---
apiVersion: "v1"
kind: "Service"
metadata:
  name: "user-service-svc"
  namespace: "default"
  labels:
    app: "user-service-app"
spec:
  type: "ClusterIP"
  selector:
    app: "user-service-app"
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 3000

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ui-service-app
  labels:
    app: ui-service-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ui-service-app
  template:
    metadata:
      labels:
        app: ui-service-app
    spec:
      containers:
      - name: ui-service-app
        image: <MY-IMAGE-URL>
        imagePullPolicy: Always
        ports:
        - containerPort: 3000

---
apiVersion: "v1"
kind: "Service"
metadata:
  name: "ui-service-svc"
  namespace: "default"
  labels:
    app: "ui-service-app"
spec:
  type: "ClusterIP"
  selector:
    app: "ui-service-app"
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 3000
  


---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: awesome-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  ingressClassName: nginx
  defaultBackend:
    service:
      name: ui-service-svc
      port:
        number: 80
  rules:
  - http:
      paths:      
      - path: /login
        pathType: Prefix
        backend:
          service:
            name: ui-service-svc
            port:
              number: 80
      - path: /user(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: user-service-svc
            port:
              number: 80

更新 1: THIS IS THE ERROR PAGE WHEN I CHANGE THE URL IN REACT APP TO HTTP://USER-SERVICE-SVC

【问题讨论】:

    标签: kubernetes devops kubernetes-ingress kubernetes-service


    【解决方案1】:

    使用关联服务的服务名称

    从同一命名空间中的任何其他 pod,主机名 user-service-svc 将映射到您定义的 Service,因此 http://user-service-svc 会将您连接到 user-service-app Deployment 的 Web 服务器(否指定端口,因为您的 Service 将端口 80 映射到容器端口 3000)。

    从另一个命名空间,您可以使用主机名 &lt;service&gt;.&lt;namespace&gt;.svc.cluster.local,但这与您在此处所做的无关。

    有关详细信息,请参阅Service documentation

    【讨论】:

    • 我试过了。它不工作。 user-service-svc 给我网络错误。
    • 基本上我的 ui-service-app 是一个基于反应的应用程序,它是我应用程序的简单 UI。我通过这些按钮注册用户并让他们登录。这是通过对用户服务应用程序的 api 调用来完成的。但是当我使用 ingress-ip/user 作为在我的反应应用程序中注册或登录用户的 api 调用时,一切正常。但是当我将其更改为user-service-svc 时,我会收到网络错误。现在将错误的屏幕截图添加到我的问题中。 @Iarsks
    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 2021-09-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多