无法访问Azure kubernetes服务负载均衡器外部IP

时间:2019-12-22 17:44:04

标签: azure docker kubernetes azure-aks azure-kubernetes

我对Kubernetes还是陌生的,并且正在测试一个示例Django“ Hello world”应用程序部署。使用docker-compose我可以在浏览器上访问地狱世界页面,但是我需要使用Kubernetes。所以我测试了两个选项,但没有一个起作用。 1)我创建了一个Azure CICD管道,使用以下Dockerfile在ACR中构建和推送映像,

FROM python:3.8
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN mkdir /hello_world
WORKDIR /hello_world
COPY . /hello_world/
RUN pip install -r requirements.txt
CMD [ "python", "manage.py", "runserver", "0.0.0.0:8000" ]

管道成功完成,并将图像上传到存储库中。

现在我使用kubectl通过部署文件进行部署,

apiVersion: apps/v1
kind: Deployment
metadata:
  name: django-helloworld
spec:
  replicas: 3
  selector:
    matchLabels:
      app: django-helloworld
  template:
    metadata:
      labels:
        app: django-helloworld
    spec:
      containers:
      - name: django-helloworld
        image: acrshgpdev1.azurecr.io/django-helloworld:194
        #imagePullPolicy: Always
        ports:
        - containerPort: 8000

---

apiVersion: v1
kind: Service
metadata:
  name: django-helloworld-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: django-helloworld

创建了部署和服务,但是当我尝试通过浏览器访问LB服务的外部IP时,无法访问该页面。我使用了外部ip:port,但是没有用。 有什么想法为什么会这样?

2)我使用了相同的Dockerfile,但是使用了不同的部署文件(将映像更改为本地创建的映像并删除了LB服务),以将应用程序部署到我的本地Kubernetes。部署文件如下,

apiVersion: v1
kind: Service
metadata:
  name: django-helloworld-service
spec:
  selector:
    app: django-helloworld
  ports:
  - protocol: TCP
    port: 80
    targetPort: 30800
  type: NodePort

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: django-helloworld
spec:
  replicas: 3
  selector:
    matchLabels:
      app: django-helloworld
  template:
    metadata:
      labels:
        app: django-helloworld
    spec:
      containers:
      - name: django-helloworld
        image: django-helloworld:1.0
        #imagePullPolicy: Always
        ports:
        - containerPort: 8000

它创建了部署和服务,但没有为NodePort服务分配外部IP,因此我无法确定应该选择哪种服务来测试应用程序成功。我知道我无法选择LB,因为它不在本地,并且我需要使用云服务进行部署。

2 个答案:

答案 0 :(得分:2)

只需将您的服务配置为LoadBalancer类型并执行正确的端口映射:

apiVersion: v1
kind: Service
metadata:
  name: django-helloworld-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8000
  selector:
    app: django-helloworld

https://kubernetes.io/docs/concepts/services-networking/service/

答案 1 :(得分:0)

确保部署也关联了健康的Pod(它们显示为Running,并且名称旁边带有1/1)。如果没有,请确保您的集群可以成功地从acrshgpdev1.azurecr.io注册表中提取;您可以按照以下article直接将AKS群集与ACR注册中心集成:

az aks update -n myAKSCluster -g myResourceGroup --attach-acr acrshgpdev1.azurecr.io

或通过将AKS群集的SP手动添加到ACR上的Reader角色。