Azure容器服务上的Kub集群路由到404,而我的docker映像在本地运行良好



我通过启用systemd服务在centOS上创建了一个docker镜像,并构建了我的镜像。我创建了docker-compose.yml文件和docker-compase-up-d,然后构建了图像,我可以在localhost:8080/my/app上访问我的应用程序。

我在用这个教程-https://carlos.mendible.com/2017/12/01/deploy-your-first-service-to-azure-container-services-aks/.

因此,在我完成docker映像后,我将映像部署到Azure容器注册表,然后创建Azure容器服务(AKS Cluster(。然后,在AKS集群上部署相同的工作docker映像,当我试图访问负载均衡器公共IP时,我发现404页面未找到。我进入kubernetes机器,尝试卷曲localhost:8080/my/app,仍然是404。

我看到我的服务在Kubernetes pod中没有任何问题,并且配置与我的docker容器几乎相同。

这是我的Dockerfile:

#Dockerfile based on latest CentOS 7 image
FROM c7-systemd-httpd-local
RUN yum install -y epel-release # for nginx
RUN yum install -y initscripts  # for old "service"
ENV container docker
RUN yum install -y bind bind-utils
RUN systemctl enable named.service 
# webserver service
RUN yum install -y nginx
RUN systemctl enable nginx.service
# Without this, init won't start the enabled services and exec'ing and starting
# them reports "Failed to get D-Bus connection: Operation not permitted".
VOLUME /run /tmp
# Don't know if it's possible to run services without starting this
ENTRYPOINT [ "/usr/sbin/init" ] 
VOLUME ["/sys/fs/cgroup"]
RUN mkdir -p /myappfolder
COPY . myappfolder
WORKDIR ./myappfolder
RUN sh ./setup.sh
WORKDIR /
EXPOSE 8080
CMD ["/bin/startServices.sh"]

这是我的Docker Compose.yml

version: '3'
services:
myapp:
build: ./myappfolder
container_name: myapp
environment:
- container=docker
ports:
- "8080:8080"
privileged: true
cap_add:
- SYS_ADMIN
security_opt:
- seccomp:unconfined
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
command: "bash -c /usr/sbin/init"

这是我的Kuectl yml文件

apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 1
template:
metadata:
labels:
app: myapp
spec:
containers:
- args:
- bash
- -c
- /usr/sbin/init
env:
- name: container
value: docker
name: myapp
image: myapp.azurecr.io/newinstalled_app:v1
ports:
- containerPort: 8080
args: ["--allow-privileged=true"]
securityContext:
capabilities:
add: ["SYS_ADMIN"]
privileged: true
#command: ["bash", "-c", "/usr/sbin/init"] 
imagePullSecrets:
- name: myapp-test
---
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
type: LoadBalancer
ports:
- port: 8080
selector:
app: myapp   

我使用了这些命令-

1. az group create --name resource group --location eastus
2. az ask create --resource-group rename --name kubname --node-count 1 --generate-ssh-keys
3. az ask get-credentials --resource-group rename --name kubname
4. kubectl get cs
5. kubectl cluster-info
6. kubectl create -f yamlfile.yml
7. kubectl get po --watch
8. kubectl get svc --watch
9. kubectl get pods
10. kubectl exec -it myapp-66678f7645-2r58w -- bash
entered into pod - its 404.
11. kubectl get svc -> External IP - 104.43.XX.XXX:8080/my/app -> goes to 404.
But my docker-compose up -d -> goes into our application.

我遗漏了什么吗?

想明白了。我需要使负载平衡器指向80,目标端口指向8080。

这是我唯一的改变,一切都开始好起来了。

谢谢!

最新更新