在CentOS上部署Kubernetes(k8s)后,如果你想将服务暴露给外部网络,可以采用以下几种方法:
NodePort是Kubernetes提供的一种简单方式,通过将服务暴露在每个节点的一个静态端口上。
创建Service:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30007
应用Service:
kubectl apply -f my-service.yaml
访问服务:
通过任意节点的IP地址和NodePort访问服务,例如:http://<node-ip>:30007
。
LoadBalancer是Kubernetes提供的一种更高级的方式,通过云提供商的负载均衡器将服务暴露给外部网络。
创建Service:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
应用Service:
kubectl apply -f my-service.yaml
获取LoadBalancer的IP地址:
kubectl get svc my-service
输出中会显示一个EXTERNAL-IP地址,通过这个IP地址访问服务。
Ingress是Kubernetes提供的一种更灵活的方式,通过Ingress控制器将外部HTTP/HTTPS流量路由到集群内部的服务。
安装Ingress控制器(例如Nginx Ingress Controller):
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud/deploy.yaml
创建Ingress资源:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
应用Ingress资源:
kubectl apply -f my-ingress.yaml
配置DNS:
将myapp.example.com
解析到Ingress控制器的IP地址。
ExternalName是一种特殊类型的Service,它可以将服务映射到外部域名。
创建Service:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: ExternalName
externalName: my.database.example.com
应用Service:
kubectl apply -f my-service.yaml
访问服务:
通过my-service
这个名称访问外部服务。
选择哪种方法取决于你的具体需求和环境。NodePort和LoadBalancer适用于简单的场景,而Ingress适用于更复杂的流量管理和路由需求。