集群Kubernetes-部署httpd和从外部访问



我创建了我的Kubernetes集群,并尝试部署这个yaml文件:

apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd-deployment
spec:
selector:
matchLabels:
app: httpd
replicas: 1
template:
metadata:
labels:
app: httpd
spec:
containers:
- name: httpd
image: httpd
ports:
- containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
name: httpd-service
spec:
selector:
app: httpd-app
ports:  
- protocol: TCP
port: 8080
targetPort: 80
nodePort: 30020
name: httpd-port
type: NodePort

这是配置:

[root@BCA-TST-K8S01 httpd-deploy]# kubectl get all -o wide
NAME                                    READY   STATUS    RESTARTS   AGE     IP          NODE               NOMINATED NODE   READINESS GATES
pod/httpd-deployment-57fc687dcc-rggx9   1/1     Running   0          8m51s   10.44.0.1   bcc-tst-docker02   <none>           <none>
NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE     SELECTOR
service/httpd-service   NodePort    10.102.138.175   <none>        8080:30020/TCP   8m51s   app=httpd-app
service/kubernetes      ClusterIP   10.96.0.1        <none>        443/TCP          134m    <none>
NAME                               READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES   SELECTOR
deployment.apps/httpd-deployment   1/1     1            1           8m51s   httpd        httpd    app=httpd
NAME                                          DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES   SELECTOR
replicaset.apps/httpd-deployment-57fc687dcc   1         1         1       8m51s   httpd        httpd    app=httpd,pod-template-hash=57fc687dcc

但我无法连接到工作者或从集群IP:

curl http://bcc-tst-docker02:30020
curl: (7) Failed to connect to bcc-tst-docker02 port 30020: Connection refused

我该如何解决这个问题?如何使用内部Matser IP公开集群(例如,我需要从主IP 10.100.170.150访问httpd部署,在同一网络中打开浏览器(

更新:

我修改了我的yaml文件如下:

apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd-deployment
spec:
selector:
matchLabels:
app: httpd-app
replicas: 2
template:
metadata:
labels:
app: httpd-app
spec:
containers:
- name: httpd
image: httpd
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: http-service
spec:
externalIPs:
- 10.100.170.150               **--> IP K8S**
externalTrafficPolicy: Cluster
ports:
- name: httpd-port
protocol: TCP
port: 8080
targetPort: 80
nodePort: 30020
selector:
app: httpd-app
sessionAffinity: None
type: LoadBalancer

这些是我运行apply命令后的结果:

[root@K8S01 LoadBalancer]# kubectl get all -o wide
NAME                                    READY   STATUS    RESTARTS   AGE   IP          NODE               NOMINATED NODE   READINESS GATES
pod/httpd-deployment-65d64d47c5-72xp4   1/1     Running   0          60s   10.44.0.2   bcc-tst-docker02   <none>           <none>
pod/httpd-deployment-65d64d47c5-fc645   1/1     Running   0          60s   10.36.0.1   bca-tst-docker01   <none>           <none>
NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)          AGE   SELECTOR
service/http-service   LoadBalancer   10.100.236.203   10.100.170.150   8080:30020/TCP   60s   app=httpd-app
service/kubernetes     ClusterIP      10.96.0.1        <none>           443/TCP          13d   <none>
NAME                               READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR
deployment.apps/httpd-deployment   2/2     2            2           60s   httpd        httpd    app=httpd-app
NAME                                          DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES   SELECTOR
replicaset.apps/httpd-deployment-65d64d47c5   2         2         2       60s   httpd        httpd    app=httpd-app,pod-template-hash=65d64d47c5

但现在,当我尝试使用K8S IP连接到httpd时,我收到了以下错误:

[root@K8S01 LoadBalancer]# curl http://10.100.170.150:8080
curl: (7) Failed to connect to 10.100.170.150 port 8080: No route to host
[root@K8S01 LoadBalancer]# curl http://10.100.236.203:8080
curl: (7) Failed to connect to 10.100.236.203 port 8080: No route to host

如果我尝试直接连接到我可以连接的节点:

[root@K8S01 LoadBalancer]# curl http://bca-tst-docker01:30020
<html><body><h1>It works!</h1></body></html>
[root@K8S01 LoadBalancer]# curl http://bcc-tst-docker02:30020
<html><body><h1>It works!</h1></body></html>

您获得connection refused是因为该服务后面没有任何端点,因为您的标签选择器与部署级别不同。

部署具有httpd标签,而服务正在尝试捕获具有httpd-app的所有部署。下面你可以找到正确的选择器:

kind: Service
apiVersion: v1
metadata:
name: httpd-service
spec:
selector:
app: httpd  <-------
ports:  
- protocol: TCP
port: 8080
targetPort: 80
nodePort: 30020
name: httpd-port
type: NodePort

您始终可以验证服务是否具有终结点。Kubernetes有一个关于调试服务的好部分,其中一个叫做:服务有端点吗?

最新更新