Skip to content

Commit

Permalink
📖 add doc about how to configure (#49)
Browse files Browse the repository at this point in the history
  • Loading branch information
Xuetao Song authored and ks-ci-bot committed Apr 30, 2019
1 parent ea8b957 commit a5207a3
Show file tree
Hide file tree
Showing 3 changed files with 154 additions and 5 deletions.
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
# Changelog

## [ 1.3.0 ] - 2019-04-30
### Added
- add some ut [@magicsong](https://github.com/yunify/qingcloud-cloud-controller-manager/pull/45)
- support eip reuse [@magicsong](https://github.com/yunify/qingcloud-cloud-controller-manager/pull/43)
- support specifying prototol in lb [@magicsong](https://github.com/yunify/qingcloud-cloud-controller-manager/pull/43)
- support ip auto allocate [@magicsong](https://github.com/yunify/qingcloud-cloud-controller-manager/pull/48)
- use secret instead of host path when reading API key [@magicsong](https://github.com/yunify/qingcloud-cloud-controller-manager/pull/47)

### Changed
- refine codes for making it easy to write unit tests
- add more e2e-tests

## [ 1.2.0 ] - 2019-04-16
### Added
- support kubernetes 1.14.1 [@magicsong](https://github.com/yunify/qingcloud-cloud-controller-manager/pull/30)
Expand Down
13 changes: 8 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# qingcloud-cloud-controller-manager
> A kubernetes cloud-controller-manager for the qingcloud
# 如何手动部署 qingcloud 负载均衡器插件
> 注:appcenter中的k8s集群都已自动配置,无需手动安装
## 如何手动部署 qingcloud 负载均衡器插件
> 注:appcenter中的k8s集群都已自动配置,无需手动安装
1. 修改所有节点的kubelet 配置参数,添加参数 KUBE_CLOUD_PROVIDER="--cloud-provider=external",参考<https://github.com/QingCloudAppcenter/kubernetes/blob/master/confd/templates/k8s/kubelet.tmpl>
1. 修改所有节点的kubelet 配置参数,添加参数 KUBE_CLOUD_PROVIDER="--cloud-provider=external",参考<https://github.com/QingCloudAppcenter/kubernetes/blob/master/confd/templates/k8s/kubelet.tmpl>*(注:这一步从测试来看并不是必须的)*
2. 如果主机的名称(hostname)已经被修改(默认都是`instance_id`),不在是`instance_id`,需要在各个节点上包括master执行下面的命令
```bash
instance_id=`cat /etc/qingcloud/instance-id`
Expand All @@ -18,19 +18,22 @@
zone = ap2a
defaultVxNetForLB = vxnet-lddzg8e #lb的默认vxnet,必填
clusterID = "mycluster" #集群名称,必填
userID = "xxxx" #当前集群API密钥的用户ID
```
- `cat /etc/qingcloud/config.yaml` api密钥文件,具体可参考<https://docs.qingcloud.com/product/cli/#%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97>
- 生成api密钥文件,具体的文件样式可参考<https://docs.qingcloud.com/product/cli/#%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97>
```
qy_access_key_id: 'QINGCLOUDACCESSKEYID'
qy_secret_access_key: 'QINGCLOUDSECRETACCESSKEYEXAMPLE'
zone: 'pek1'
```
使用命令创建secret, `kubectl create secret generic qcsecret --from-file=$secret_file -n kube-system`,替换其中的secret_file为上面生成的密钥地址。

4. 安装yaml,等待安装完成即可
```
kubectl apply -f https://raw.githubusercontent.com/yunify/qingcloud-cloud-controller-manager/master/deploy/kube-cloud-controller-manager.yaml
```
# 如何使用 qingcloud 负载均衡器插件
请参考[青云官方用户手册](https://docs.qingcloud.com/product/container/k8s#%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%99%A8),为 service 定义添加合适的 annotation
请参考[负载均衡器配置指南](docs/configure.md)
134 changes: 134 additions & 0 deletions docs/configure.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
# 青云负载均衡器配置指南

> 大部分的配置都是基于需要使用LB插件对应Service的`Annotation`,简单来讲,`Annotation`记录了关于当前服务的额外配置信息,参考<https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/>了解如何使用
## 一、负载均衡器属性配置

- `ServiceAnnotationLoadBalancerType`:在Service的`annotations`中添加此Key,表示使用yunify负载均衡器,不添加此Key的Service在Event中会有错误。其值范围和[create_loadbalancer](https://docs.qingcloud.com/product/api/action/lb/create_loadbalancer.html)中的type相同。

- 青云负载均衡器支持http/s协议的负载均衡,如果想要使用青云负载均衡器更多的功能,请将服务的特定的端口name写为`http``https`,如下:
```yaml
kind: Service
apiVersion: v1
metadata:
name: mylbapp
annotations:
service.beta.kubernetes.io/qingcloud-load-balancer-type: "0"
spec:
selector:
app: mylbapp
type: LoadBalancer
ports:
- name: http #这里指定port name,如果有多个http端口,都可以指定为http
port: 8088
targetPort: 80
```
将ServicePort命名为http之后,就可以在青云控制台上查看http监控。更多的功能支持诸如`转发规则定义`、`透明代理`等功能还在开发中

## 二、公网IP配置
> 使用青云负载均衡器时需要配合一个公网ip,cloud-controller带有IP管理功能。

### 手动配置公网ip
这是本插件的默认方式,即用户需要在Service中添加公网ip的annotation。首先在Service annotation中添加如下key: `service.beta.kubernetes.io/qingcloud-load-balancer-eip-source`,并设置其值为`mannual`。如果不设置此Key,默认是`mannual`。然后必须继续添加`service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids`的key,其值公网IP的ID,如果需要绑定多个IP,以逗号分隔。请确保此IP处于可用状态。如下:
```yaml
kind: Service
apiVersion: v1
metadata:
name: mylbapp
annotations:
service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids: "eip-xxxxx" #这里设置EIP
service.beta.kubernetes.io/qingcloud-load-balancer-type: "0"
spec:
selector:
app: mylbapp
type: LoadBalancer
ports:
- name: http
port: 8088
targetPort: 80
```

### 自动获取IP
自动获取ip有三种方式,分别是:

1. 自动获取当前账户下处于可用的EIP,如果找不到返回错误。
2. 自动获取当前账户下处于可用的EIP,如果找不到则申请一个新的
3. 不管账户下有没有可用的EIP,申请一个新EIP

如果开启EIP的自动获取的功能,需满足两个条件:
1. 集群的配置文件中`/etc/kubernetes/qingcloud.conf`配置`userID`,是因为一些用户API权限较大,会获取到其他用户的IP。
2. 配置Service Annotations中的`service.beta.kubernetes.io/qingcloud-load-balancer-eip-source`不为`mannual`,上述三种方式对应的值分别为:
1. `use-available`
2. `auto`
3. `allocate`

参考下面样例:
```yaml
kind: Service
apiVersion: v1
metadata:
name: mylbapp
annotations:
service.beta.kubernetes.io/qingcloud-load-balancer-eip-source: "auto" #也可以填use-available,allocate
service.beta.kubernetes.io/qingcloud-load-balancer-type: "0"
spec:
selector:
app: mylbapp
type: LoadBalancer
ports:
- name: http
port: 8088
targetPort: 80
```

## 三、配置多个Service共享一个EIP

由于公网IP是稀缺资源,我们提供了多个Service共享一个EIP的模式。使用这个模式有一定限制:
1. EIP被设置为多个Service共享模式之后,所有手动指定这个EIP且不设置共享的Service将无法正确获取LB
2. 多个Service对外暴露的端口不能冲突,例如不能有两个Service同时暴露8080端口,这种情况下,我们建议将其中一个改为8081
3. 一个EIP最多能被十个端口共享,即如果一个Service只需要对外暴露一个端口的话,那么可以最多有10个Service共享这个EIP

### 如何配置
1. `service.beta.kubernetes.io/qingcloud-load-balancer-eip-source`必须为`manual`
2. `service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids`中填入共享的EIP ID
3. `service.beta.kubernetes.io/qingcloud-load-balancer-eip-strategy`设置为`reuse`

参考下面的例子,下面两个service共有了一个EIP
```yaml
kind: Service
apiVersion: v1
metadata:
name: reuse-eip1
annotations:
service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids: "eip-xxxxxx"
service.beta.kubernetes.io/qingcloud-load-balancer-type: "0"
service.beta.kubernetes.io/qingcloud-load-balancer-eip-strategy: "reuse"
spec:
selector:
app: mylbapp
type: LoadBalancer
ports:
- name: http
port: 8089
targetPort: 80
---
kind: Service
apiVersion: v1
metadata:
name: reuse-eip2
annotations:
service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids: "eip-xxxxxx"
service.beta.kubernetes.io/qingcloud-load-balancer-type: "0"
service.beta.kubernetes.io/qingcloud-load-balancer-eip-strategy: "reuse"
spec:
selector:
app: mylbapp
type: LoadBalancer
ports:
- name: http
port: 8090
targetPort: 80
```


0 comments on commit a5207a3

Please sign in to comment.