0

我设法在 kubernetes 集群上部署了一个 python 应用程序。python 应用程序映像部署在 AWS ECR(弹性容器注册表)。
我的部署是:

( NAME )charting-rest-server
( READY )1/1
( UP-TO-DATE )1
( AVAILABLE )1
( AGE )33m
( CONTAINERS )charting-rest-server
(图像) *****.dkr.ecr .eu-west-2.amazonaws.com/charting-rest-server:latest
( SELECTOR )app=charting-rest-server

我的服务是:

( NAME )charting-rest-server-service
( TYPE )LoadBalancer
( CLUSTER-IP )10.100.4.207
( EXTERNAL-IP )*******.eu-west-2.elb.amazonaws.com
( PORT(s ) )8765:32735/TCP
(年龄)124m
(选择器)app=charting-rest-server

根据这个AWS 指南,当我这样做时,curl *****.us-west-2.elb.amazonaws.com:80我应该能够从外部访问负载均衡器,它会将我路由到我的 pod 的 ip。
但我得到的只是

(6) 无法解析主机:*******.eu-west-2.elb.amazonaws.com



如果我想访问我的 pod 并发送一些请求,我应该考虑一下,我应该有一个类似的外部 ip 111.111.111.111(obv 示例)。


编辑


部署的 yaml 是:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: charting-rest-server
spec:
  selector:
    matchLabels:
      app: charting-rest-server
  replicas: 1
  template:
    metadata:
      labels:
        app: charting-rest-server
    spec:
      containers:
      - name: charting-rest-server
        image: *****.eu-west-2.amazonaws.com/charting-rest-server:latest
        ports: 
          - containerPort: 5000


服务的 yaml:

apiVersion: v1
kind: Service
metadata:
  name:  charting-rest-server-service
spec:
  type: LoadBalancer
  selector:
    app: charting-rest-server
  ports:
    - protocol: TCP
      port: 80
      targetPort: 5000

我已经尝试了评论中的建议,使用了一个入口实例,但我最终只花费了大量时间试图了解它们是如何工作的,“我做错了什么吗?/等等。

我将把我使用的 yaml 文件放在这里,但由于我的 ADDRESS 字段为空,它没有任何变化——没有 ip 可以使用。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: charting-rest-server-ingress
spec:
  rules:
  - host: charting-rest-server-service
    http:
      paths:
      - path:/
        backend:
          serviceName: charting-rest-server-service
          servicePort: 80

我被困在这个问题上很长时间了,所以我会很感激一些帮助。

4

1 回答 1

1

您已经创建了一个Servicewith type LoadBalancer,但看起来您配置了不正确的端口。

Deployment是用创建的containerPort: 5000,你Service的指向是targetPort: 9376。这些需要匹配Deployment才能被暴露。

如果您在编写时遇到困难yamlService可以Deployment使用以下 kubectl 命令公开:

kubectl expose --namespace=tick deployment charting-rest-server --type=LoadBalancer --port=8765 --target-port=5000 --name=charting-rest-server-service

修复这些端口后,您将能够使用其主机名从外部访问该服务:

status:
  loadBalancer:
    ingress:
    - hostname: aba02b223436111ea85ea06a051f04d8-1294697222.eu-west-2.elb.amazonaws.com

我还推荐本指南教程:在 AWS 快速入门 Kubernetes 集群上公开服务

如果您需要对 http 规则进行更多控制,请考虑使用ingress,您可以阅读更多关于Amazon EKS 上的ALB 入口控制器以及在 Amazon EKS上将网络负载均衡器与 NGINX 入口控制器一起使用。

于 2020-02-07T14:46:11.897 回答