Kubernetes:服务清单不提供访问应用程序的端点
Kubernetes: The service manifest doesn't provide an endpoint to access the application
这个 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
你必须进入控制器,或者你也可以使用负载均衡器类型作为服务,分配你喜欢的静态 ip。两者都有效
您必须在 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。
对于服务类型负载均衡器,您的清单应如下所示:
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 列入白名单。
这个 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
你必须进入控制器,或者你也可以使用负载均衡器类型作为服务,分配你喜欢的静态 ip。两者都有效
您必须在 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。
对于服务类型负载均衡器,您的清单应如下所示:
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 列入白名单。