Azure 容器服务上的 Kub 集群路由到 404,而我的 docker 图像在我的本地运行正常?

Kub Cluster on Azure Container Service routes to 404, while my docker image works fine in my local?

我通过启用 systemd 服务在 centOS 上创建了一个 docker 映像并构建了我的映像。我创建了 docker-compose.yml 文件和 docker-compose 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 集群)。然后将相同的工作 docker 图像部署到 AKS 集群上,当我尝试访问负载平衡器 public IP 时,我得到 404 页面未找到。我进入 kubernetes 机器并尝试 curl localhost:8080/my/app,仍然是 404.

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

这是我的Docker文件:

#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"

这是我的 Kubectl 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。

这是我所做的唯一更改,一切开始正常运行。

谢谢!