0

我通过启用 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 群集,当我尝试访问负载均衡器公共 IP 时,我得到 404 页面未找到。我进入 kubernetes 机器并尝试 curl 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"

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

我错过了什么吗?

4

1 回答 1

0

弄清楚了。我需要让负载均衡器指向 80,目标端口指向 8080。

这是我所做的唯一改变,一切都开始正常了。

谢谢!

于 2018-07-27T17:13:45.127 回答