《OpenShift 4.x HOL教程汇总》
说明:本文已经在OpenShift 4.14环境中验证
在OpenShift中,通常我们是根据Service生成Route对象来为外部客户端提供一个访问应用的地址。不过也可以不通过Route,而是直接在Node上开一个nodePort来访问Service(虽然这种方式一般不在生产环境中使用)。这种方式的实现机制如下图,当为Service定义了nodePort后,Openshift会在每个对应Node打开nodePort端口(如下图30001),这样当客户端无论访问那个节点的30001端口就都可以访问到Service了(如果在node前再加一层外部负载均衡,就可以实现节点访问负载均衡了)。
下面我们在OpenShift上实现这种配置。
- 创建测试应用,其中我们会在nodepod-client上通过NodePort的方式访问nodepod-service应用的Service。
$ oc new-project service-nodeport
$ oc new-app openshift/hello-openshift -n service-nodeport
- 访问OpenShift控制台,查看nodepod-service的Service配置。在YAML页面找到“type: ClusterIP”部分,改为“type: NodePort”,然后Save保存。此时该Service的Details的页面会显示以下的Service显示信息,其中以下Node Port的2个端口是系统自动生成的。如果需要,可以再通过“Edit YAML”修改Node Port。
- 获得任一个worker角色的Node节点的内部访问IP地址
$ oc get nodes --selector="node-role.kubernetes.io/worker"
NAME STATUS ROLES AGE VERSION
ip-10-0-152-241.ap-southeast-1.compute.internal Ready worker 5d4h v1.19.0+7070803
ip-10-0-176-189.ap-southeast-1.compute.internal Ready worker 5d4h v1.19.0+7070803
$ oc describe node ip-10-0-152-241.ap-southeast-1.compute.internal | grep InternalIP
InternalIP: 10.0.152.241
- 进入一个master节点。
$ oc get nodes --selector="node-role.kubernetes.io/master"
NAME STATUS ROLES AGE VERSION
ip-10-0-130-191.ap-southeast-1.compute.internal Ready master 5d4h v1.19.0+7070803
ip-10-0-164-17.ap-southeast-1.compute.internal Ready master 5d4h v1.19.0+7070803
ip-10-0-193-183.ap-southeast-1.compute.internal Ready master 5d4h v1.19.0+7070803
$ oc debug node/$(oc get nodes --selector="node-role.kubernetes.io/master" | awk 'NR==2{print}' | awk '{print $1}')
- 在master节点内部通过Node地址+nodePort访问worker节点的Service。
sh-4.4# curl 10.0.152.241:31306
Hello OpenShift!