无法访问 Kubernetes 的 LoadBalancer 服务
Cannot access a LoadBalancer service at Kubernetes
我设法在 kubernetes 集群上部署了一个 python 应用程序。 python 应用程序映像部署在 AWS ECR(弹性容器注册表)。
我的部署是:
(NAME)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
我的服务是:
(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
(AGE)124m
(SELECTOR)app=charting-rest-server
根据此 AWS guide ,当我执行 curl *****.us-west-2.elb.amazonaws.com:80
时,我应该能够从外部访问 Load Balancer ,它会将我路由到我的 pod 的 ip。
但我得到的只是
(6) Could not resolve host: *******.eu-west-2.elb.amazonaws.com
考虑一下,如果我想访问我的 pod 并发送一些请求,我应该有一个像 111.111.111.111
这样的外部 IP(obv an例子)。
编辑
部署的 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
我已经使用入口实例尝试过评论中的建议,但我最终只花了大量时间试图了解它们的工作原理,"am I doing something wrong"?/等等。
我将把我使用的 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
我在这个问题上被困了很长时间,希望能得到一些帮助。
您已经创建了类型为 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
我也推荐这个指南Tutorial: Expose Services on your AWS Quick Start Kubernetes cluster。
如果您需要更多地控制 http 规则,请考虑使用 ingress
, you can read more about ALB Ingress Controller on Amazon EKS also Using a Network Load Balancer with the NGINX Ingress Controller on Amazon EKS。
我设法在 kubernetes 集群上部署了一个 python 应用程序。 python 应用程序映像部署在 AWS ECR(弹性容器注册表)。
我的部署是:
(NAME)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
我的服务是:
(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
(AGE)124m
(SELECTOR)app=charting-rest-server
根据此 AWS guide ,当我执行 curl *****.us-west-2.elb.amazonaws.com:80
时,我应该能够从外部访问 Load Balancer ,它会将我路由到我的 pod 的 ip。
但我得到的只是
(6) Could not resolve host: *******.eu-west-2.elb.amazonaws.com
考虑一下,如果我想访问我的 pod 并发送一些请求,我应该有一个像 111.111.111.111
这样的外部 IP(obv an例子)。
编辑
部署的 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
我已经使用入口实例尝试过评论中的建议,但我最终只花了大量时间试图了解它们的工作原理,"am I doing something wrong"?/等等。
我将把我使用的 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
我在这个问题上被困了很长时间,希望能得到一些帮助。
您已经创建了类型为 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
我也推荐这个指南Tutorial: Expose Services on your AWS Quick Start Kubernetes cluster。
如果您需要更多地控制 http 规则,请考虑使用 ingress
, you can read more about ALB Ingress Controller on Amazon EKS also Using a Network Load Balancer with the NGINX Ingress Controller on Amazon EKS。