上次的实验中创建的Nginx容器只能使用内网IP访问,外网是无法访问的,这并不是我们想要的。一个服务要能够通过外网IP地址访问到内网里的容器服务那才是最终的结果;今天继续通过Kubernetes来创建容器并通过宿主机IP地址加端口方法访问到Nginx服务;

创建一个nging_service.yaml配置文件

 

    1. apiVersion: v1
    2. kind: Service
    3. metadata:
    4. name: nginx-service
    5. spec:
    6. externalIPs:
    7. - 10.0.10.135
    8. ports:
    9. - port: 8000
    10. targetPort: 80
    11. protocol: TCP
    12. selector:
    13. app: web01

    说明:上面配置中定义一个service服务,命令为nginx-service,定义对外的IP地址为:本机的10.0.10.135,把宿主机上的8000端口映射到容器80端口上,走和协议为TCP,选择器选择所有属于app=web01分组的容器,这个对于集群就很方便了;

    接下来再定义一个nginx_pod.yaml配置文件:

    1. apiVersion: v1
    2. kind: ReplicationController
    3. metadata:
    4. name: nginx
    5. spec:
    6. replicas: 1
    7. selector:
    8. app: web01
    9. template:
    10. metadata:
    11. name: nginx
    12. labels:
    13. app: web01
    14. spec:
    15. containers:
    16. - name: nginx
    17. image: reg.docker.tb/harbor/nginx:latest
    18. ports:
    19. - containerPort: 80

     说明:这里跟之前的Pod是有区别的,这里定义的类型为ReplicationController 复制控制,并定义app名为web01; 

    执行创建命令:

     

    1. [root@node5 ~]# kubectl create -f nginx_service.yaml
    2. service "nginx-service" created
    3. [root@node5 ~]# kubectl create -f nginx_pod.yaml
    4. replicationcontroller "nginx" created
    5. [root@node5 ~]# kubectl get service
    6. NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    7. kubernetes 10.254.0.1 <none> 443/TCP 2d
    8. nginx-service 10.254.182.210 10.0.10.135 8000/TCP 11s
    9. [root@node5 ~]# kubectl get pods
    10. NAME READY STATUS RESTARTS AGE
    11. nginx-27hgx 1/1 Running 0 10s

     

     看到这个nginx-service有一个EXTERNAL-IP为10.0.10.135 这就是对外的IP地址;打开浏览器访问10.0.10.135:8000即可访问到Nginx容器了;

    可外部访问的Kubernetes容器_内网

    这样就实现了可供外网访问的一个容器实验了。