我设法在 kubernetes 集群上部署了一个 python 应用程序。python 应用程序映像部署在 AWS ECR(弹性容器注册表(中。
我的部署是:
(名称(charting-rest-server (
READY(1/1 (
UP-TO-DATE(1
(AVAILABLE(1 (
AGE(33m (CONTAINERS(charting-rest-server (
IMAGES( *****.dkr.ecr.eu-west-2.amazonaws.com/charting-rest-server:latest
(SELECTOR(app=charting-rest-server
我的服务是:
(名称(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 (
AGE(124m
(SELECTOR(app=charting-rest-server
根据这个AWS指南,当我这样做时curl *****.us-west-2.elb.amazonaws.com:80
我应该能够从外部访问负载均衡器,它将把我路由到我的pod的ip。
但我得到的只是
(6( 无法解析主机:********.eu-west-2.elb.amazonaws.com
想想看,如果我想访问我的 pod 并发送一些请求,我应该有一个像111.111.111.111
这样的外部 ip(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
我已经尝试了评论中的建议,使用入口实例,但我最终只花了大量时间试图了解它们的工作原理,"我做错了什么吗"?/etc。
我将把我使用的yaml文件放在这里,但它没有改变,因为我的地址字段为空 - 没有要使用的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
我被困在这个问题上很长时间了,所以我将不胜感激。
您已经创建了一个类型为LoadBalancer
的Service
,但看起来您配置的端口不正确。
您的Deployment
是用containerPort: 5000
创建的,您的Service
指向targetPort: 9376
。这些需要匹配要暴露Deployment
。
如果您很难为Service
编写yaml
,您可以使用以下 kubectl 命令公开Deployment
:
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 入口控制器的更多信息。