为了将您的 Kubernetes 服务公开到互联网,您必须更改 ServiceType。
您的服务使用默认值 ClusterIP,它将服务暴露在集群内部 IP 上,使其只能在集群内访问。
1 - 如果您使用 AWS 或 GCP 等云提供商,您最好的选择是使用 LoadBalancer 服务类型:,它使用提供商负载均衡器自动向互联网公开。
运行:
kubectl expose deployment deployment-name --type=LoadBalancer --name=service-name
deployment-name 必须替换为您的实际部署名称。所需的service-name
也是如此
等待几分钟,kubectl get svc 命令将为您提供外部 IP 和端口:
owilliam@minikube:~$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d21h
nginx-service-lb LoadBalancer 10.96.125.208 0.0.0.0 80:30081/TCP 36m
2 - 如果您在本地运行 Kubernetes(如 Minikube),最好的选择是 Nodeport 服务类型:
它将服务公开给集群节点(托管计算机)。
对于测试目的而言,这比将服务暴露在整个互联网上更安全。
运行:kubectl expose deployment deployment-name --type=NodePort --name=service-name
其中deployment-name 必须替换为您的实际部署名称。所需的service-name
也是如此
下面是我将 Nginx 网络服务器暴露给 NodePort 后的输出供您参考:
user@minikube:~$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d21h
service-name NodePort 10.96.33.84 <none> 80:31198/TCP 4s
user@minikube:~$ minikube service list
|----------------------|---------------------------|-----------------------------|-----|
| NAMESPACE | NAME | TARGET PORT | URL |
|----------------------|---------------------------|-----------------------------|-----|
| default | kubernetes | No node port |
| default | service-name | http://192.168.39.181:31198 |
| kube-system | kube-dns | No node port |
| kubernetes-dashboard | dashboard-metrics-scraper | No node port |
| kubernetes-dashboard | kubernetes-dashboard | No node port |
|----------------------|---------------------------|-----------------------------|-----|
user@minikube:~$ curl http://192.168.39.181:31198
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...//// suppressed output
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
user@minikube:~$