群集内无法访问ClusterIP

时间:2020-10-26 19:35:08

标签: kubernetes containers devops kubernetes-service

我正在努力使用kubernates配置。我想要得到的只是在集群中进行部署。该群集位于我的专用服务器上,我正在使用Kubeadm对其进行部署。

我的节点:

$ kubectl get nodes
NAME          STATUS   ROLES    AGE   VERSION
k8s-master    Ready    master   9d    v1.19.3
k8s-worker1   Ready    <none>   9d    v1.19.3

我正在运行一个部署(nginx基本示例)

$ kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           29m

我已经创建了服务

$ kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP   9d
my-service   ClusterIP   10.106.109.94   <none>        80/TCP    20m

我的服务的YAML文件如下:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: nginx-deployment
  ports:
    - protocol: TCP
      port: 80

现在我应该期望,如果我在curl 10.106.109.94:80上运行k8s-master来获得http答案..但是我得到的是:

curl: (7) Failed to connect to 10.106.109.94 port 80: Connection refused

我也尝试过使用NodePort以及targetPortnodePort,但是结果是相同的。

1 个答案:

答案 0 :(得分:0)

无法从群集外部访问群集ip,这意味着您将不会从托管k8s群集的主机获得任何响应,因为此ip不是您的计算机或任何其他计算机的一部分,而不是其IP地址。群集CNI网络使用的cluster ip,例如flunnel,weave。 因此,要从外部或从主机至少访问服务,必须更改服务类型,例如NodePort,LoadBalancer,K8s端口转发。

如果您可以更改服务类型NodePort,则将获得任何主机IP和分配的Nodeport的响应。 例如,如果您的k8s-master是192.168.x.x而nodePort是33303,那么您可以通过以下方式获得响应

curl http://192.168.x.x:33303
or
curl http://worker_node_ip:33303

如果您的集群是本地安装的,则可以安装metalLB以获得负载均衡器的特权。

您还可以使用端口转发从具有kubectl客户端且具有k8s群集访问权限的主机上访问您的服务。

kubectl port-forward svc/my-service 80:80

kubectl -n namespace port-forward svc/service_name Port:Port