我有一个非常简单的基于HTML,javascript+一点jquery,angularjs的Web应用程序。它在 eclipse Jee 和 Tomcat 上进行了本地测试,工作正常。它的映像在本地 docker 上运行良好。
我可以使用localhost:8080/xxxx
、127.0.0.1:8080/xxxx
、0.0.0.0:8080
在浏览器上访问。但是当我部署到谷歌 Kubernetes 时,如果我在浏览器上使用外部 IP,我会得到"无法访问此站点"。我可以 ping 我的外部 IP,但卷曲不起作用。这不是防火墙问题,因为来自 dockerhub 的示例投票应用程序在我的 Kubernetes 上运行良好。
我的 Dockerfile:
FROM tomcat:9.0
ADD GeoWebv3.war /usr/local/tomcat/webapps/GeoWeb.war
expose 8080
我的豆荚亚姆
apiVersion: v1
kind: Pod
metadata:
name: front-app-pod
labels:
name: front-app-pod
app: demo-geo-app
spec:
containers:
- name: front-app
image: myrepo/mywebapp:v2
ports:
- containerPort: 80
我的服务 亚姆
apiVersion: v1
kind: Service
metadata:
name: front-service
labels:
name: front-service
app: demo-geo-app
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
name: front-app-pod
app: demo-geo-app
像这样改变你的 yamls
apiVersion: v1
kind: Service
metadata:
name: front-service
labels:
name: front-service
app: demo-geo-app
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
selector:
name: front-app-pod
app: demo-geo-app
apiVersion: v1
kind: Pod
metadata:
name: front-app-pod
labels:
name: front-app-pod
app: demo-geo-app
spec:
containers:
- name: front-app
image: myrepo/mywebapp:v2
ports:
- containerPort: 8080
在 docker 映像中公开端口 8080。因此,在服务中,您必须说targetPort: 8080
将端口 80 上进入负载均衡器的流量重定向到容器的端口 8080