Kubernetes:服务 list 不提供访问应用程序的端点

标签 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

最佳答案

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

此外,请尝试使用您在评论中的帮助下进行的更改来更新服务 list 。

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

上述 list 是错误的,对于 NodePort (--service-node-port-range=30000-32767), list 应如下所示:

  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 进行连接。

对于服务类型负载均衡器,您的 list 应如下所示:

  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 列入白名单。

关于Kubernetes:服务 list 不提供访问应用程序的端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61773840/

相关文章:

azure - 在 AKS 创建期间创建新的默认主体

azure - 负载均衡器未在 Azure AKS 引擎上获取公共(public) IP

azure - 不为入口资源创建 DNS 记录

kubernetes - 为什么我在 alpha 集群创建期间收到 "(gcloud.alpha.container.clusters.create) ResponseError: code=404, message=Method not found."?

azure - 如何在 azure 容器创建中传递容器级别参数

Azure Kubernetes LoadBalancer 将请求转发到所有实例

azure - 如何使用 AKS 挂载本地卷 hostPath?

kubernetes - 如何调试 Kubernetes CreateContainerConfigError

kubernetes - 删除后重新创建Pod

azure - 使用托管标识将 Azure Key Vault 与 Azure Kubernetes 服务集成