Kubernetes:服务清单未提供访问应用程序的端点

时间:2020-05-13 11:48:56

标签: kubernetes azure-aks

这个Yaml试图在k8s中部署一个简单的Arangodb架构,我知道有ArangoDB的运算符,但是它是一个简单的PoC,用于了解k8s的各个部分并使用其他应用程序对该数据库进行迭代。

问题是此YAML文件可以正确执行,但是我没有任何IP:PORT可以连接,但是当我在本地执行该docker映像时,它可以工作。

# create: kubectl apply -f ./arango.yaml
# delete: kubectl delete -f ./arango.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: nms
  name: arangodb-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: arangodb-pod
  template:
    metadata:
      labels:
        app: arangodb-pod
    spec:
      containers:
      - name: arangodb
        image: arangodb/arangodb:3.5.3
        env:
        - name: ARANGO_ROOT_PASSWORD
          value: "pass"
        ports:
        - name: http
          containerPort: 8529
          protocol: TCP
        resources:
          limits:
            cpu: 100m
            memory: 128Mi
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  namespace: nms
  name: arangodb-svc
spec:
  type: LoadBalancer
  selector:
    app: arangodb-pod
  ports:
  - targetPort: 8529
    protocol: TCP
    port: 8529
    targetPort: http
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  namespace: nms
  name: arango-storage
  labels:
    app: arangodb-pod
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi

说明似乎很清楚:

NAME           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
arangodb-svc   LoadBalancer   10.0.150.245   51.130.11.13        8529/TCP   14m

我正在从AKS执行kubectl apply -f arango.yaml,但是我无法访问任何IP:8529。一些建议?

我想模拟这些命令:

docker run -p 8529:8529 -e ARANGO_ROOT_PASSWORD=pass -d --name arangodb-instance arangodb/arangodb:3.5.3
docker start arangodb-instance

2 个答案:

答案 0 :(得分:3)

您必须从您的VNet配置中允许NSG级别的NodePort 31098,并将该NSG规则附加到AKS群集。

还请尝试使用注释帮助中所做的更改来更新服务清单。

  - targetPort: 8529
    protocol: TCP
    port: 8529
    targetPort: http --< **Its completely wrong field, the manifest wont be parsed.**

上述清单是错误的,对于NodePort(-service-node-port-range = 30000-32767 ),清单应该看起来像这样:

  spec:
  type: NodePort
  selector:
    app: arangodb-pod
  ports:
      # By default and for convenience, the `targetPort` is set to the same value as the `port` field.
    - name: http
      port: 8529
      targetPort: 8529
      # Optional field
      nodePort: 31044

您可以从AKS外部通过 public-NODE-IP:NodePort 连接。

对于服务类型的loadbalancer,您的清单应如下所示:

  spec:
  type: LoadBalancer
  selector:
    app: arangodb-pod
  ports:
    - name: http
      protocol: TCP
      port: 8529
      targetPort: 8529

对于LoadBalancer,您可以连接 LoadBalancer-External-IP:external-port

但是,在以上两种情况下,都应该有NSG白名单规则。您应该将本地计算机的IP或访问该计算机的IP地址列入白名单。

答案 1 :(得分:0)

您必须进入控制器,或者也可以使用负载均衡器类型作为服务来辅助您喜欢的静态IP。两者都可以工作