Skip to content

Commit

Permalink
service
Browse files Browse the repository at this point in the history
  • Loading branch information
A-Ethan committed Jul 16, 2019
1 parent 0a52a12 commit ff834bb
Show file tree
Hide file tree
Showing 10 changed files with 48 additions and 48 deletions.
18 changes: 9 additions & 9 deletions service/annotations.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
=====Service Annotations====
{{indexmenu_n>0}}
## Service Annotations

本文主要描述用于创建LoadBalancer 类型的Service时,与ULB相关的Annotations说明。

Expand All @@ -8,7 +8,7 @@

### 内网ULB4

<code>
```
"service.beta.kubernetes.io/ucloud-load-balancer-type"
# 负载均衡器类型,必须指定
"service.beta.kubernetes.io/ucloud-load-balancer-vserver-protocol"
Expand All @@ -22,7 +22,7 @@
# 用户自定义String,会话保持方式为UserDefined有效
"service.beta.kubernetes.io/ucloud-load-balancer-vserver-client-timeout"
# 空闲连接的回收时间
</code>
```

**Annotations 详解**

Expand Down Expand Up @@ -57,7 +57,7 @@ ListenType为PacketsTransmit时表示连接保持的时间,单位为秒,取


### 外网ULB4
<code yaml>
```
service.beta.kubernetes.io/ucloud-load-balancer-vserver-protocol: "TCP"
# TCP和UDP均代表ULB4,HTTPS和HTTP均代表ULB7;
service.beta.kubernetes.io/ucloud-load-balancer-vserver-method
Expand All @@ -69,7 +69,7 @@ ListenType为PacketsTransmit时表示连接保持的时间,单位为秒,取
service.beta.kubernetes.io/ucloud-load-balancer-vserver-client-timeout
# 空闲连接的回收时间
</code>
```
**Annotations 详解**

* service.beta.kubernetes.io/ucloud-load-balancer-vserver-protocol
Expand All @@ -94,7 +94,7 @@ ListenType为PacketsTransmit时表示连接保持的时间,单位为秒,取

### 外网ULB7

<code yaml>
```
service.beta.kubernetes.io/ucloud-load-balancer-vserver-protocol: "HTTPS"
# 协议类型,TCP和UDP均表示ULB4,HTTPS和HTTP均表示ULB7
service.beta.kubernetes.io/ucloud-load-balancer-vserver-ssl-cert: "ssl-b103etqy"
Expand All @@ -115,7 +115,7 @@ ListenType为PacketsTransmit时表示连接保持的时间,单位为秒,取
## HTTP检查域名
service.beta.kubernetes.io/ucloud-load-balancer-vserver-monitor-path
##HTTP检查路径
</code>
```

**Annotations 详解**

Expand Down Expand Up @@ -157,7 +157,7 @@ ListenType为PacketsTransmit时表示连接保持的时间,单位为秒,取

### 外网ULB绑定的EIP注释

<code yaml>
```
"service.beta.kubernetes.io/ucloud-load-balancer-eip-paymode": "ShareBandwidth"
# 支持Traffic、Bandwidth、ShareBandwidth,默认为Bandwidth
"service.beta.kubernetes.io/ucloud-load-balancer-eip-sharebandwidthid": "bwshare-d8dklw"
Expand All @@ -168,4 +168,4 @@ ListenType为PacketsTransmit时表示连接保持的时间,单位为秒,取
# 付费模式,支持Month,Year,Dynamic
"service.beta.kubernetes.io/ucloud-load-balancer-eip-quantity": "1"
# 付费时长,默认为1,chargetype为Dynimic时无效
</code>
```
17 changes: 9 additions & 8 deletions service/dashboard.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
=====通过ULB暴露Kubernetes Dashboard=======
{{indexmenu_n>0}}
## 通过ULB暴露Kubernetes Dashboard


Dashboard是Kubernetes社区的一个Web开源项目,你可以通过Dashboard来部署更新应用、排查应用故障以及管理Kubernetes集群资源。另外,Dashboard还提供了集群的状态,以及错误日志等信息。下面我们介绍下如何在UK8S上部署、访问DashBoard。

### 部署Dashboard

UK8S集群没有默认安装Dashboard,如果你希望体验社区原生Dashboard,需要自行安装,下载yaml示例,在集群中输入如下命令即可:

<code>
```
kubectl apply -f dashboard-ui.yaml
</code>
```

具体的yaml示例如下,涉及的Kubernetes对象有Deployment、LoadBalancer Service、Role、RoleBinding、ServiceAccount等。需要注意的是,Service的访问类型为HTTP,如果您希望使用HTTPS,请先购买SSL证书。

<code yaml dashboard-ui.yaml>
```
# ------------------- Dashboard Deployment ------------------- #
apiVersion: extensions/v1beta1
kind: Deployment
Expand Down Expand Up @@ -177,22 +178,22 @@ spec:
targetPort: 9090
protocol: TCP
</code>
```

### 二、访问Dashboard

在上面的实例中,我们创建了一个名为kubernetes-dashboard-http的Service,service type为LoadBalancer,可直接通过Service 的外网IP(实际为ULB的外网IP)访问Dashboard。

<code>kubectl get svc -n kube-system | grep kubernetes-dashboard-http </code>
```kubectl get svc -n kube-system | grep kubernetes-dashboard-http ```


获取到外网IP后,我们直接在浏览器中输入IP,到达登录页面,Dashboard支持kubeconfig和token两种身份验证方式,此处我们选择Token验证方式。


在之前的yaml里,我们创建了一个dashboard-ui的ServiceAccount,我们可通过以下命名获取该服务账号的Token,用来登录Dashboard。

<code>
```
kubectl describe secret dashboard-ui -n kube-system
</code>
```

将获取的token复制到输入框,点击登录,即可开始使用Dashboard。
18 changes: 9 additions & 9 deletions service/externalservice.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
=====通过外网ULB访问Service====
{{indexmenu_n>10}}
## 通过外网ULB访问Service


> 1.除EIP带宽外,ULB相关参数目前均不支持Update,如不确认如何填写,请咨询UCloud 技术支持。2.请勿修改ULB和Vserver的名称和备注,否则会导致Service无法正常更新。3.Kubernetes下LoadBalancer类型的Service,尚不支持多协议,比如TCP、UDP。
Expand All @@ -16,7 +16,7 @@
当前LoadBalancer类型的Service暂不支持UDP,请知悉。

<code yaml>
```
apiVersion: v1
kind: Service
metadata:
Expand Down Expand Up @@ -55,7 +55,7 @@ spec:
image: uhub.service.ucloud.cn/ucloud/nginx:1.9.2
ports:
- containerPort: 80
</code>
```


### 重要说明
Expand All @@ -77,7 +77,7 @@ Git Commit ID: 2723d13b69a4d6f5b905a7f96bd7eed49617f439

老版本的ULB7只支持单种协议,即HTTP或HTTPS。 下文示例中,对外暴露2个端口,都使用HTTP协议。

<code yaml>
```
apiVersion: v1
kind: Service
Expand Down Expand Up @@ -119,15 +119,15 @@ spec:
image: uhub.service.ucloud.cn/ucloud/nginx:1.9.2
ports:
- containerPort: 80
</code>
```


### 通过外网ULB7暴露服务(cloudprovider-ucloud version>=19.05.3)


19.05.3以后的插件,外网ULB7同时支持HTTP和HTTPS两种协议,下文示例中,对外暴露了三个端口,其中80端口使用HTTP协议,443和8443使用HTTPS协议。

<code yaml>
```
apiVersion: v1
kind: Service
Expand Down Expand Up @@ -225,7 +225,7 @@ spec:
image: uhub.service.ucloud.cn/ucloud/nginx:1.9.2
ports:
- containerPort: 80
</code>
```


### HTTPS支持(cloudprovider-ucloud version>=19.05.3)
Expand All @@ -239,7 +239,7 @@ spec:
使用ULB7的HTTPS协议模式时,Pod内的服务程序不需要实现HTTPS协议服务,只需要提供HTTP服务即可,ULB7发往后端的报文为解密后的HTTP协议报文。


<code yaml>
```
apiVersion: v1
kind: Service
Expand Down Expand Up @@ -277,7 +277,7 @@ spec:
image: uhub.service.ucloud.cn/ucloud/nginx:1.9.2
ports:
- containerPort: 80
</code>
```

### 常见问题

Expand Down
13 changes: 6 additions & 7 deletions service/getresourceip.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
=====获取真实客户端IP======
{{indexmenu_n>0}}

## 获取真实客户端IP

### 网络编程中如何获得对端IP

Expand Down Expand Up @@ -92,15 +91,15 @@ func AppRouter(w http.ResponseWriter, r *http.Request) {
```
在外网通过浏览器访问该服务,如下所示。

{{:compute:uk8s:service:guestcome.png?600|}}
![](/images/service/guestcome.png)

结果显示用户的访问IP地址是一台云主机的内网IP地址,显然不正确。

### 原因解释

Loadbalancer创建成功后,ULB4的VServer将UK8S集群中的每个Node云主机节点作为自身的RS节点,RS端口为Service申明的Port值(注意不是NodePort)。ULB4将访问流量转发到其中一个RS后,RS根据本机上kube-proxy生成的iptables规则将流量DNAT到后端Pod中,如下所示。

{{:compute:uk8s:service:ulb4.jpg?600|}}
![](/images/service:ulb4.jpg)

图中ULB4先将流量转发到Node1中,Node1中根据iptables DNAT规则,将流量转发给Node2中的Pod。
需要注意的是,Node1将IP包转发到Node2前,对这个包有一次SNAT操作。准确地说,是一次MASQUERADE操作,规则如下。
Expand All @@ -113,7 +112,7 @@ Loadbalancer创建成功后,ULB4的VServer将UK8S集群中的每个Node云主

由于IP请求包的源地址被修改,Pod内的程序网络库通过getpeername(2)调用获取到的对端地址是Node1的IP地址而不是客户端真实的地址。

__为什么需要对流出的包做SNAT操作呢?__
**为什么需要对流出的包做SNAT操作呢?**

原因比较简单。参考下图,当Node1上的Pod处理完请求后,需要发送响应包,如果没有SNAT操作,Pod收到的请求包源地址就是client的IP地址,这时候Pod会直接将响应包发给client的IP地址,但对于client程序来说,它明明没有往PodIP发送请求包,却收到来自Pod的IP包,这个包很可能会被client丢弃。而有了SNAT,Pod会将响应包发给Node1,Node1再根据DNAT规则产生的conntrack记录,将响应包通过返回给client。

Expand Down Expand Up @@ -161,7 +160,7 @@ spec:
```
重新部署服务后,再用浏览器访问,可以发现Pod正确获取了浏览器的访问IP。

{{:compute:uk8s:service:realip.png?600|}}
![](/images/service/realip.png)

而这个机制的原理也很简单,当设置了externalTrafficPolicy为Local时,Node上的iptables规则会设置只将IP包转发到在本机上运行的Pod,如果本机上无对应Pod在运行,此包将被DROP。如下图,这样Pod可以直接使用client的源地址进行回包而不需要SNAT操作。

Expand All @@ -184,4 +183,4 @@ spec:

对于其他未运行Service对应Pod的Node节点来说,ULB VServer对其健康检查探测会因为iptables的DROP规则而失败,这样来自用户的请求永远不会被发往这些节点上,可以确保这些请求都能被正确响应。

{{:compute:uk8s:service:vserver.png?600|}}
![](/images/service/vserver.png)
2 changes: 1 addition & 1 deletion service/ingress.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
======Ingress支持======
{{indexmenu_n>7}}
## Ingress支持

###什么是Ingress

Expand Down
14 changes: 7 additions & 7 deletions service/ingress/nginx.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
======Nginx Ingress======
{{indexmenu_n>0}}
## Nginx Ingress

###什么是Ingress

Expand All @@ -14,10 +14,10 @@ Ingress 是从Kubernetes集群外部访问集群内部服务的入口,同时
### 一、部署Ingress Controller

为了使Ingress正常工作,集群内必须部署Ingress Controller。与其他类型的控制器不同,其他类型的控制器如Deployment通常作为kube-controller-manager二进制文件的一部分,在集群启动时自动运行。而Ingress Controller则需要自行部署,Kubernetes社区提供了以下Ingress Controller供选择,分别如下:
1Nginx
2HAProxy
3Envoy
4Traefik
1. Nginx
2. HAProxy
3. Envoy
4. Traefik

这里我们选择Nginx作为Ingress Controller,部署Nginx Ingress Controller非常简单,执行以下指定即可。

Expand All @@ -31,7 +31,7 @@ kubectl apply -f http://uk8s.cn-bj.ufileos.com/yaml/ingress/nginx/mandatory.yaml

另外,在这个yaml文件中,我们还看到定义了ConfigMap,nginx-ingress-controller可以通过ConfigMap对象来对Nginx配置文件进行定制,示例如下:

<code yaml>
```
kind: ConfigMap
apiVersion: v1
Expand All @@ -44,7 +44,7 @@ kubectl apply -f http://uk8s.cn-bj.ufileos.com/yaml/ingress/nginx/mandatory.yaml
data:
map-hash-bucket-size: "128"
ssl-protocols: SSLv2
</code>
```

需要注意的是,ConfigMap中的key和value只支持字符串,因此对于整数等类型,需要使用双引号,例如"100",详细资料见[Nginx-Ingress-ConfigMap](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/)

Expand Down
3 changes: 2 additions & 1 deletion service/ingress/traefik.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
======Traefik Ingress=====
{{indexmenu_n>0}}
## Traefik Ingress

###什么是Ingress

Ingress 是从Kubernetes集群外部访问集群内部服务的入口,同时为集群内的Service提供七层负载均衡能力。
Expand Down
6 changes: 3 additions & 3 deletions service/internalservice.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
=====通过内网ULB访问Service====
{{indexmenu_n>10}}
## 通过内网ULB访问Service

> 注意:除外网EIP外,ULB相关参数目前均不支持Update,如不确认如何填写,请咨询UCloud 技术支持。
Expand All @@ -8,7 +8,7 @@

暂不支持UDP类型的Service。

<code yaml>
```
apiVersion: v1
kind: Service
metadata:
Expand Down Expand Up @@ -41,4 +41,4 @@ spec:
image: uhub.service.ucloud.cn/ucloud/nginx:1.9.2
ports:
- containerPort: 80
</code>
```
2 changes: 1 addition & 1 deletion service/intro.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
=====Service 介绍====
{{indexmenu_n>1}}
## Service 介绍

本章节主要为您简要介绍 Kubernetes 中的一个重要概念 Service(即服务,本文中两者等同),以及ULB的相关知识。

Expand Down
3 changes: 1 addition & 2 deletions service/ulb_designation.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
=====使用已有的ULB====

{{indexmenu_n>0}}
## 使用已有的ULB

###背景

Expand Down

0 comments on commit ff834bb

Please sign in to comment.