当您没有可用的SLB时,Cloud Controller Manager(CCM)组件可以为LoadBalancer类型服务自动创建SLB,并对其进行管理。本文以Nginx应用为例,介绍如何通过使用自动创建SLB的服务来公开应用。
注意事项
- CCM只为
Type=LoadBalancer
类型的服务配置SLB。对于非LoadBalancer类型的服务,则不会为其配置负载均衡。
注意 当Type=LoadBalancer
的服务变更为其他类型时,CCM会删除为该SLB添加的配置,从而造成无法通过该SLB访问服务。
- CCM使用声明式API,会在一定条件下自动根据服务的配置刷新SLB配置。您自行在SLB控制台上修改的配置均存在被覆盖的风险。
注意 请勿在SLB控制台上手动修改Kubernetes创建并维护的SLB的任何配置,否则有配置丢失的风险,造成服务不可访问。
步骤一:部署示例应用
以下应用部署通过kubectl命令行方式进行。如果您需要通过控制台部署应用,请参见使用镜像创建无状态Deployment应用。
- 使用以下示例应用的YAML内容,创建名为my-nginx.yaml文件。
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
name: my-nginx #示例应用的名称。
labels:
app: nginx
spec:
replicas: 3 #设置副本数量。
selector:
matchLabels:
app: nginx #对应服务中Selector的值需要与其一致,才可以通过服务公开此应用。
template:
metadata:
labels:
app: nginx
spec:
# nodeSelector:
# env: test-team
containers:
- name: nginx
image: registry.aliyuncs.com/acs/netdia:latest #替换为您实际的镜像地址,格式为:<image_name:tags>。
ports:
- containerPort: 80 #需要在服务中暴露该端口。
- 执行以下命令,部署示例应用my-nginx。
kubectl apply -f my-nginx.yaml
- 执行以下命令,确认示例应用状态正常。
kubectl get deployment my-nginx
返回结果示例:
NAME READY UP-TO-DATE AVAILABLE AGE
my-nginx 3/3 3 3 50s
步骤二:通过使用自动创建SLB的服务公开应用
您可以通过控制台和kubectl两种方式来创建LoadBalancer类型的服务,并通过其公开应用。
控制台方式
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择。
- 在服务页面,单击右上角的创建。
- 在创建服务对话框中,设置服务的相关参数。

参数 |
描述 |
名称 |
输入服务的名称,本示例为my-nginx-svc。 |
类型 |
选择服务类型,即服务访问的方式。依次选择:负载均衡 -> 公网访问 -> 新建SLB -> 单击修改选择所需的SLB规格。本示例使用默认规格:简约型I(slb.s1.small)。
|
关联 |
选择关联该服务要绑定的后端应用,本示例为my-nginx。若不进行关联部署,则不会创建相关的Endpoints对象,您也可自己进行绑定,请参见services-without-selectors。
|
外部流量策略 |
设置外部流量策略,本示例为Local。
- Local:流量只发给本机的Pod。
- Cluster:流量可以转发到集群中其他节点上的Pod。
说明 您的服务类型为节点端口或负载均衡时,才能设置外部流量策略。
|
端口映射 |
添加服务端口(对应Service YAML文件中的port )和容器端口(对应Service YAML文件中的targetPort ),容器端口需要与后端的Pod中暴露的容器端口一致。本示例皆为80。
|
注解 |
为该服务添加一个注解(Annotation),配置负载均衡的参数。您可以选择自定义注解或阿里云注解。
本示例中,将该服务的收费方式设置为按带宽收费,带宽峰值设置为2 Mbit/s,从而控制服务的流量。更多注解请参见 通过Annotation配置负载均衡。
- 类型:阿里云注解
- 名称:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type 、service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth 、
- 值:paybybandwidth、2
|
标签 |
为该服务添加一个标签,标识该服务。 |
- 单击创建。
在
服务页面,可以看到新创建的服务。

- 单击该服务在外部端点列的39.106.xx.xx:80,访问示例应用。
Kubectl方式
- 使用以下示例服务的YAML内容,创建名为my-nginx-svc.yaml的文件。
将
selector修改为
my-nginx.yaml示例应用文件中
matchLabels的值(本示例为
app: nginx
),从而将该服务关联至后端应用。
apiVersion: v1
kind: Service
metadata:
labels:
app: nignx
name: my-nginx-svc
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
- 执行以下命令创建名为my-nginx-svc的服务,并通过其公开应用。
kubectl apply -f my-nginx-svc.yaml
- 执行以下命令确认LoadBalancer类型的服务创建成功。
kubectl get svc my-nginx-svc
返回结果示例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-nginx-svc LoadBalancer 172.21.5.82 39.106.xx.xx 80:30471/TCP 5m
- 执行curl <YOUR-External-IP>命令访问示例应用,请将<YOUR-External-IP>替换为上面获取到的
EXTERNAL-IP
地址。curl 39.106.xx.xx
返回结果示例:
<!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>
在文档使用中是否遇到以下问题
更多建议
匿名提交