在 Kubernetes 中应用可通过Service的不同配置方法对外暴露服务,ACK支持通过指定SLB和自动创建SLB两种方式对外暴露LoadBalancer类型的服务。本文介绍如何通过指定SLB和自动创建SLB来暴露服务。
需要先在阿里云ACK中创建Kubernetes集群。
安装kubectl命令行工具。
1、执行以下命令,创建一个Nginx应用。
# kubectl run nginx --image=registry.aliyuncs.com/acs/netdia:latest
2、执行以下命令,确认Nginx应用的状态正常。
# kubectl get po -l run=nginx
NAME READY STATUS RESTARTS AGE
nginx-2721357637-dvwq3 1/1 Running 1 6s
ACK支持通过指定SLB和自动创建SLB两种方式对外暴露。
1、执行以下命令为Nginx应用服务自动创建SLB。
# cat <<-EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
labels:
run: nignx
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
2、执行以下命令确认LoadBalance类型的Service创建成功。
# kubectl get svc -l run=nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx LoadBalancer 172.23.xx.xx 123.56.xx.xxx 80:31015/TCP 14s
通过指定SLB对外暴露服务需要先有一个SLB实例,如果当前还没有SLB实例可通过SLB控制台创建。
1、执行以下命令为Nginx应用服务暴露服务。
说明: 请替换${YOUR_LB_ID}
为您通过SLB控制台创建的SLB实例ID。
# cat <<-EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${YOUR_LB_ID}
labels:
run: nignx
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
2、执行以下命令确认LoadBalance类型的Service创建成功。
# kubectl get svc -l run=nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx LoadBalancer 172.23.8.212 123.56.xx.xxx 80:31015/TCP 14s
Nginx应用已通过SLB对外暴露服务,可通过如下命令进行验证。
说明: 请替换${YOUR_LB_IP}
为上述Service中EXTERNAL-IP
字段显示的IP。
# curl ${YOUR_LB_IP}
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>