我正在努力使用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
以及targetPort
和nodePort
,但是结果是相同的。
答案 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