gpt4 book ai didi

amazon-web-services - 无法访问通过AWS上运行的Kubernetes集群上的Nginx入口 Controller 公开的Spring Boot微服务

转载 作者:行者123 更新时间:2023-12-02 12:07:42 25 4
gpt4 key购买 nike

在此演练之后,我已使用kube-up.sh脚本在AWS上旋转了一个3节点的Kubernetes集群(版本:1.5.8):

https://ryaneschinger.com/blog/building-a-kubernetes-cluster-on-aws/

我能够成功访问集群并查看UI。 kubectl cluster-info命令的输出:

enter image description here

我写了一个简单的Spring Boot微服务:

@RestController
public class AddCustomerController {

private static final String template = "Customer %s is added.";

@RequestMapping("/addcustomer")
public Message addcustomer(@RequestParam(value="name") String name) {

//Retrieve the hostname of the "node"/"container"
String hostname = null;
try {
hostname = InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {
e.printStackTrace();
}

return new Message(ThreadLocalRandom.current().nextLong(),
String.format(template, name),
hostname);
}
}

并在Gradle构建之后将其打包在Docker容器中,并能够在本地成功使用它。我已将镜像推送到DockerHub。
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD build/libs/*.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

现在,我正在使用Helm Charts将此应用程序部署到Kubernetes。

部署描述符:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: add-customer-deployment
spec:
replicas: 3
template:
metadata:
name: add-customer-microservice
labels:
app: add-customer
spec:
containers:
- image: {{ .Values.dockerHubUsername }}/add-customer-microservice:latest
name: add-customer-microservice
imagePullPolicy: Always
ports:
- containerPort: 8080

服务描述符:
apiVersion: v1
kind: Service
metadata:
name: add-customer-service
spec:
selector:
app: add-customer
ports:
- port: 1000
protocol: TCP
targetPort: 8080
name: access-port
type: NodePort

对于其他3个类似的Spring Boot微服务,我遵循了相同的步骤。

入口描述符:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: quantiphi-poc-ingress-dns
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: crud.qdatalabs.com
http:
paths:
- path: /service1
backend:
serviceName: add-customer-service
servicePort: 1000
- path: /service1/*
backend:
serviceName: add-customer-service
servicePort: 1000
- path: /service2
backend:
serviceName: get-customer-service
servicePort: 2000
- path: /service2/*
backend:
serviceName: get-customer-service
servicePort: 2000
- path: /service3
backend:
serviceName: update-customer-service
servicePort: 3000
- path: /service3/*
backend:
serviceName: update-customer-service
servicePort: 3000
- path: /service4
backend:
serviceName: delete-customer-service
servicePort: 4000
- path: /service4/*
backend:
serviceName: delete-customer-service
servicePort: 4000

首先,我使用Helm Charts在集群上安装了nginx Controller :
helm install --name my-release stable/nginx-ingress

然后我使用以下方法安装图表:
helm install folder-conataining-helm-chart/

然后,我将Route53的crud.qdatalabs.com(类型A)的别名指向由Ingress资源生成的ELB。

URL crud.qdatalabs.com/healthz
给出200 OK响应

当我尝试使用URL crud.qdatalabs.com/service1/addcustomer?name=starman访问微服务时

我收到WhiteLabel错误页面的处理:

enter image description here

我认为我已经犯了一些配置错误,但不能对此付诸行动。请帮助我任何方向。我很乐意提供更多详细信息。谢谢。

最佳答案

正如我在Setting up a Kuberentes cluster with HTTP Load balancing ingress for RStudio and Shiny results in error pages中所述,您最可能遇到的问题是,在进行此入口操作时,您附加的URI与直接访问权限(/ service1 / vs /)不同,因此您的应用程序丢失了,并且没有该uri的内容。

使用Nginx Ingress Controller,您可以使用ingress.kubernetes.io/rewrite-target:/注释来缓解这种情况,并确保即使入口路径中有子文件夹,也可以访问/。

因此,您需要使用适当的重写批注或支持在服务内部的入口中使用的路径。

关于amazon-web-services - 无法访问通过AWS上运行的Kubernetes集群上的Nginx入口 Controller 公开的Spring Boot微服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48762138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com