可以从集群内访问 clusterip 服务,但不能使用 kubectl 代理
Can access clusterip service from within cluster but not by using kubectl proxy
我正在尝试通过 docker-for-mac 在我的笔记本电脑上访问 clusterip 服务(运行 kubernetes)。
在 instructions here 之后,我能够像这样成功地 ping 服务:
kubectl run curl --image=radial/busyboxplus:curl -i --tty
curl -v http://10.106.1.204:8000/api/v0.1/predictions -d '{"foo": "bar"}' -H "Content-Type: application/json"
但我无法使用服务名称而不是 ip 使其工作。然后我尝试使用 kubectl proxy as described here,但我无法让它工作:
kubectl proxy --port=8080 &
curl -v http://127.0.0.1:8080/api/v1/proxy/namespaces/deploy-test/services/10.106.1.204:8000/api/v0.1/predictions
这给了我一个 404 错误以及以下所有错误:
curl -v http://127.0.0.1:8080/api/v1/proxy/namespaces/deploy-test/services/10.106.1.204:8000
curl -v http://127.0.0.1:8080/api/v1/proxy/namespaces/deploy-test/services/10.106.1.204:8000/predictions
curl -v http://127.0.0.1:8080/api/v1/proxy/namespaces/deploy-test/services/10.106.1.204:8000/api/v0.1/predictions
以及在上述所有内容中将 8000
替换为 http
的所有组合 and/or 带有服务名称的 ip。
我可以确认代理正在工作,因为 http://127.0.0.1:8080/api/v1/namespaces/deploy-test/pods
工作。
这是服务的描述。请注意,我专门尝试通过 clusterip 访问它,而不是使用 Ambassador。
kubectl describe svc -n deploy-test template-product-app-seldon-prediction-service
Name: template-product-app-seldon-prediction-service
Namespace: deploy-test
Labels: seldon-app=template-product-app-seldon-prediction-service
seldon-deployment-id=template-product-app-seldon-prediction-service
Annotations: getambassador.io/config:
---
apiVersion: ambassador/v1
kind: Mapping
name: seldon_deploy-test_seldon-prediction-service_rest_mapping
prefix: /seldon/deploy-test/seldon-prediction-service/
service: template-product-app-seldon-prediction-service.deploy-test:8000
timeout_ms: 3000
---
apiVersion: ambassador/v1
kind: Mapping
name: seldon_deploy-test_seldon-prediction-service_grpc_mapping
grpc: true
prefix: /seldon.protos.Seldon/
rewrite: /seldon.protos.Seldon/
service: template-product-app-seldon-prediction-service.deploy-test:5001
timeout_ms: 3000
headers:
namespace: deploy-test
seldon: seldon-prediction-service
retry_policy:
retry_on: connect-failure
num_retries: 3
Selector: seldon-app=template-product-app-seldon-prediction-service
Type: ClusterIP
IP: 10.106.1.204
Port: http 8000/TCP
TargetPort: 8000/TCP
Endpoints: 10.1.1.4:8000
Port: grpc 5001/TCP
TargetPort: 5001/TCP
Endpoints: 10.1.1.4:5001
Session Affinity: None
Events: <none>
关于如何通过 kubectl proxy
而不是使用 radial/busyboxplus:curl
启动一个 pod 的任何建议?
通过kubectl代理访问http服务的一般格式如下:
http://api.host/api/v1/namespaces/NAMESPACE/services/SERVICE_NAME:SERVICE_PORT/proxy/
在您的情况下,您添加了不必要的集群 ip。
尝试:
http://127.0.0.1:8080/api/v1/namespaces/deploy-test/services/template-product-app-seldon-prediction-service:8000/proxy/api/v0.1/predictions
http://127.0.0.1:43029/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard
请注意,这可能不适用于 grpc,仅适用于 http。 (在这种情况下,请改用 NodePort 或 LoadBalancer)
我正在尝试通过 docker-for-mac 在我的笔记本电脑上访问 clusterip 服务(运行 kubernetes)。
在 instructions here 之后,我能够像这样成功地 ping 服务:
kubectl run curl --image=radial/busyboxplus:curl -i --tty
curl -v http://10.106.1.204:8000/api/v0.1/predictions -d '{"foo": "bar"}' -H "Content-Type: application/json"
但我无法使用服务名称而不是 ip 使其工作。然后我尝试使用 kubectl proxy as described here,但我无法让它工作:
kubectl proxy --port=8080 &
curl -v http://127.0.0.1:8080/api/v1/proxy/namespaces/deploy-test/services/10.106.1.204:8000/api/v0.1/predictions
这给了我一个 404 错误以及以下所有错误:
curl -v http://127.0.0.1:8080/api/v1/proxy/namespaces/deploy-test/services/10.106.1.204:8000
curl -v http://127.0.0.1:8080/api/v1/proxy/namespaces/deploy-test/services/10.106.1.204:8000/predictions
curl -v http://127.0.0.1:8080/api/v1/proxy/namespaces/deploy-test/services/10.106.1.204:8000/api/v0.1/predictions
以及在上述所有内容中将 8000
替换为 http
的所有组合 and/or 带有服务名称的 ip。
我可以确认代理正在工作,因为 http://127.0.0.1:8080/api/v1/namespaces/deploy-test/pods
工作。
这是服务的描述。请注意,我专门尝试通过 clusterip 访问它,而不是使用 Ambassador。
kubectl describe svc -n deploy-test template-product-app-seldon-prediction-service
Name: template-product-app-seldon-prediction-service
Namespace: deploy-test
Labels: seldon-app=template-product-app-seldon-prediction-service
seldon-deployment-id=template-product-app-seldon-prediction-service
Annotations: getambassador.io/config:
---
apiVersion: ambassador/v1
kind: Mapping
name: seldon_deploy-test_seldon-prediction-service_rest_mapping
prefix: /seldon/deploy-test/seldon-prediction-service/
service: template-product-app-seldon-prediction-service.deploy-test:8000
timeout_ms: 3000
---
apiVersion: ambassador/v1
kind: Mapping
name: seldon_deploy-test_seldon-prediction-service_grpc_mapping
grpc: true
prefix: /seldon.protos.Seldon/
rewrite: /seldon.protos.Seldon/
service: template-product-app-seldon-prediction-service.deploy-test:5001
timeout_ms: 3000
headers:
namespace: deploy-test
seldon: seldon-prediction-service
retry_policy:
retry_on: connect-failure
num_retries: 3
Selector: seldon-app=template-product-app-seldon-prediction-service
Type: ClusterIP
IP: 10.106.1.204
Port: http 8000/TCP
TargetPort: 8000/TCP
Endpoints: 10.1.1.4:8000
Port: grpc 5001/TCP
TargetPort: 5001/TCP
Endpoints: 10.1.1.4:5001
Session Affinity: None
Events: <none>
关于如何通过 kubectl proxy
而不是使用 radial/busyboxplus:curl
启动一个 pod 的任何建议?
通过kubectl代理访问http服务的一般格式如下:
http://api.host/api/v1/namespaces/NAMESPACE/services/SERVICE_NAME:SERVICE_PORT/proxy/
在您的情况下,您添加了不必要的集群 ip。 尝试:
http://127.0.0.1:8080/api/v1/namespaces/deploy-test/services/template-product-app-seldon-prediction-service:8000/proxy/api/v0.1/predictions
http://127.0.0.1:43029/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard
请注意,这可能不适用于 grpc,仅适用于 http。 (在这种情况下,请改用 NodePort 或 LoadBalancer)