我是kubernetes的新手,我尝试使用kubernetes运行小型应用程序。我创建了docker映像并使用minikube来运行它。因此应用程序非常简单,它只显示hello-world。
@RestController
@RequestMapping(value = "helloworld")
public class MyController {
@GetMapping
public HelloWord helloWord(){
return new HelloWord("Hello Word");
}
}
我的dockerfile:
FROM adoptopenjdk/openjdk11-openj9:jdk-11.0.1.13-alpine-slim
VOLUME /tmp
ARG JAR_FILE=target/myapp-1.0.0.jar
COPY ${JAR_FILE} myapp-1.0.0.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-jar","/myapp-1.0.0.jar"]
deployment.yaml
apiVersion: v1
kind: Service
metadata:
name: myhelloworldservice
spec:
selector:
app: my-hello-world-app
ports:
- protocol: "TCP"
port: 8080
targetPort: 80
nodePort: 30003
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-hello-world
spec:
selector:
matchLabels:
app: my-hello-world-app
replicas: 5
template:
metadata:
labels:
app: my-hello-world-app
spec:
containers:
- name: hello-world
image: myname/myhelloimage
ports:
- containerPort: 80
我运行命令:
kubectl create -f deployment.yaml
输出为:
创建服务/ myhelloworldservice
创建的Deployment.apps / my-hello-world
我运行minikube ip命令获取ip,然后使用该ip地址通过端口30003访问我的应用程序,但无法访问我的应用程序。
我用过:
http://xxx.xx.xx.xxx:30003/helloworld
为什么无法访问我的应用程序,这是什么问题?我得到这个网站无法访问。拒绝连接错误。
您的服务属于LoadBalancer类型,特定于访问。使用Minikube,您可以使用以下方法访问它们:
minikube tunnel
有关更多信息,请参见https://minikube.sigs.k8s.io/docs/tasks/loadbalancer/
看代码,它似乎是基于Spring的服务。服务不太可能在端口80上侦听-Spring的默认值为8080。因此,假设实际端口为8080,请更改:
targetPort: 80
定义中的[targetPort: 8080
至Service
。type: LoadBalancer
定义中的type: NodePort
至Service
。containerPort: 80
定义中的[containerPort: 8080
至Deployment
。您可以使用kubectl port-forward <<created_container_name>> 80
从minikube转发到本地主机现在,您应该可以通过localhost:80/helloworld