1、使用hostPort的方式

这是一种直接定义Pod网络的方式。hostPort是直接将容器的端口与所调度的节点上的端口路由,这样用户就可以通过宿主机的IP加上来访问Pod了。

[root@master opt]# vim hostpath.yml     '创建一个yml文件,指定对外服务的端口'
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: nginx
    name: test-container
    ports:
    - containerPort: 80
      hostPort: 8081
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      path: /opt/yml
[root@master opt]# kubectl create -f hostpath.yml   '执行,等待pod创建完毕'
pod/test-pd created
[root@master opt]# kubectl get pods
NAME                    READY   STATUS              RESTARTS   AGE
nginx-dbddb74b8-gtc99   1/1     Running             0          16h
test-pd                 0/1     ContainerCreating   0          11s
[root@master opt]# kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
nginx-dbddb74b8-gtc99   1/1     Running   0          16h
test-pd                 1/1     Running   0          28s
[root@master opt]# kubectl get pods -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP            NODE              NOMINATED NODE
nginx-dbddb74b8-gtc99   1/1     Running   0          16h   172.17.71.3   192.168.179.123   <none>
test-pd                 1/1     Running   0          34s   172.17.71.5   192.168.179.123   <none>

通过访问POD所在NODE的IP和映射的端口就能访问POD的服务了
在这里插入图片描述

2、使用NodePort的方式

nodePort在kubenretes里是一个广泛应用的服务暴露方式。Kubernetes中的service默认情况下都是使用的ClusterIP这种类型,这样的service会产生一个ClusterIP,这个IP只能在集群内部访问,要想让外部能够直接访问service,需要将service type修改为 nodePort。

[root@master opt]# vim httpdpod.yml 

apiVersion: v1
kind: Pod
metadata:
  name: httpd
  labels:
    name: httpd
spec:
  containers:
    - name: httpd
      image: httpd
      ports:
        - containerPort: 80
[root@master opt]# vim rc1server.yml 

kind: Service
apiVersion: v1
metadata:
  name: httpd
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 38899
  selector:
    name: httpd
[root@master opt]# kubectl create -f httpdpod.yml 
pod/httpd created
[root@master opt]# kubectl get pods
NAME                    READY   STATUS              RESTARTS   AGE
httpd                   0/1     ContainerCreating   0          10s
nginx-dbddb74b8-gtc99   1/1     Running             0          17h
test-pd                 1/1     Running             0          45m
[root@master opt]# kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
httpd                   1/1     Running   0          57s
nginx-dbddb74b8-gtc99   1/1     Running   0          17h
test-pd                 1/1     Running   0          45m
[root@master opt]# kubectl create -f rc1server.yml 
service/httpd created

在这里插入图片描述

Kubernetes中的pod访问还有两种方式

port方式
port是在Service IP中使用的,使用Service IP +Port就可以访问到服务

targetPort方式
targetPort 说的是Pod内的应用暴露的服务端口,Service IP+Port的访问会被代理到这个Target Port

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐