利用k8s yaml配置文件起一个http能够让外部访问

1、首先建一个http的Deployment

apiVersion: apps/v1                      #版本信息
kind: Deployment                         #文件类型  
metadata:                                #Deployment资源的元数据信息  name 和 labels必须有
  name: http-deployment
  labels:
    app: http-label
spec:                                    #spec部分是该Deployment的规格说明。
  replicas: 3                            #副本数  意味着http的pod 会有三个
  selector:                              #defines how the Deployment finds which Pods to manage  与下面的template定义的标签一致
    matchLabels:
      app: http-label
  template:                              #每个pod的模板配置信息在这里
    metadata:                            #pod资源的元数据信息 labels必须有  不然上面的selector会选不到
      labels:
        app: http-label
    spec:                                #spec描述Pod的规格,此部分定义Pod中每一个容器的属性,name和image是必需的。
      containers:
        - name: httpd
          image: httpd
          ports:
            - containerPort: 80

2、可以通过 kubectl apply -f http.yaml 来启动上面的资源

[root@master1 test]# kubectl apply -f http.yaml
deployment.apps/http-deployment configured
[root@master1 test]# kubectl get pods
NAME                                READY   STATUS              RESTARTS   AGE
http-deployment-6bd68845b-dhw72     0/1     ContainerCreating   0          7s
http-deployment-6bd68845b-fqf8c     1/1     Running             0          33m
http-deployment-6bd68845b-ksrt5     0/1     ContainerCreating   0          7s

3、这个时候pod里面的http服务只能集群内部访问  看一下pod的网络ip  这是虚拟的ip  通过net实现的

[root@master1 test]# kubectl get pods -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP               NODE      NOMINATED NODE   READINESS GATES
http-deployment-6bd68845b-dhw72     1/1     Running   0          15m   10.130.209.237   node1     <none>           <none>
http-deployment-6bd68845b-fqf8c     1/1     Running   0          48m   10.130.209.235   node1     <none>           <none>
http-deployment-6bd68845b-ksrt5     1/1     Running   0          15m   10.130.209.238   node1     <none>           <none>

4、k8s集群内部所有节点都可以访问到

[root@master1 test]# curl 10.130.209.237
<html><body><h1>It works!</h1></body></html>
[root@master1 test]# curl 10.130.209.235
<html><body><h1>It works!</h1></body></html>
[root@master1 test]# curl 10.130.209.238
<html><body><h1>It works!</h1></body></html>
[root@master1 test]#

5、外面怎么访问呢  k8s用 service 来做到的  pod的上层是service  两者通过iptables交互

     新建一个service的yaml   httpSvc.yaml

apiVersion: v1
kind: Service                          #类型这次是Service了  
metadata:
  name: http-svc
spec:
  type: NodePort                       #NodePort没有 外网不能访问 只能集群访问service接口  nodeport和service也是通过iptables转发的
  selector:
    app: http-label                    #这里的标签 表示这个服务会选择这种标签的pod  作为他的后端服务  他来当pod外层的service 统一服务
  ports:
    - protocol: TCP
      nodePort: 30001                  #NodePort端口  用来外部访问的  如果不设置,会随机选一个范围(30000~32767)
port: 8080 targetPort : 80

6、同理启动一下  kubectl apply -f httpSvc.yaml

7、看看服务是否都ok

[root@master1 test]# kubectl get services
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
http-svc     NodePort    172.30.169.160   <none>        8080:30001/TCP   52m
kubernetes   ClusterIP   172.30.0.1       <none>        443/TCP          25h

8、可以集群访问 

[root@master1 test]# curl 172.30.169.160:8080
<html><body><h1>It works!</h1></body></html>
[root@master1 test]#

9、外网访问 我的主机ip是 192.168.10.1 在浏览器 输入http://192.168.10.1:30001/

 

 ps:每次访问的是随机去pod的节点的 所以很好的负载均衡了



posted @ 2021-03-02 18:01  s。  阅读(1295)  评论(0编辑  收藏  举报