配置公网 IP
英博云支持通过公网 IP 的方式,对外暴露服务。
配置公网IP的操作均为 K8S Native 方式,您需要通过 kubectl 命令进行操作,关于 kubectl 工具,具体参考这里。
注意:
- 本文档仅限于为普通 K8S 工作负载配置公网 IP,为容器实例(ContainerServer)配置公网 IP,为请参考这里。
使用 Service 分配公网 IP
英博云支持用k8s native的方式为服务分配公网IP,通过定义 LoadBalancer 类型的 Service 实现,一个示例如下:
yaml
---
apiVersion: v1
kind: Service
metadata:
name: sglang-svc
namespace: default
spec:
type: LoadBalancer
ports:
- port: 9080
targetPort: 8080
protocol: TCP
selector:
app: sglang注意:
- 公网 IP 为付费资源,若是您不再需要使用公网 IP,请及时释放。
默认情况下公网IP流量使用共享带宽, 如果需要独占公网IP流量, 配置方式如下:
yaml
apiVersion: v1
kind: Service
metadata:
...
annotations:
networking.eks.ebcloud.com/rate: "100mbit" # 独享对等带宽, 上行=下载=100mbit, 单位为 mbit/gbit, 最小为 1mbit
spec:
type: LoadBalancer
...注意:
- 默认共享带宽池按 1mbit 计费, 实际网速与当前分区负载高低相关, 独占带宽按实际配置大小收费, 最小为 1mbit。
- 独占带宽只能用于 LoadBalancer 类型的 Service, 不能用于其他类型的 Service。
- 每个分区总带宽有上限, 当不够分配时, 会分配失败
确定其是否分配成功可以查看 Service 的事件, 成功不会报错, 失败会报如下错误:
shell
% kubectl describe svc sglang-svc
Name: sglang-svc
Namespace: default
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning SyncError 4s (x11 over 9s) service-syncer Error syncing: patch host object: update object: admission webhook "services.validating.ebtech.com" denied the request: check load balancer service public ip rate error: bandwidth limit exceeded, can't allocate ip, service:查看公网 IP 的地址
可以通过如下如下命令查看公网 IP:
shell
% kubectl get svc sglang-svc -owide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
sglang-svc LoadBalancer 10.233.xx.xx 117.74.xx.xx 9080:31740/TCP 15s app=sglang其中 EXTERNAL-IP 字段为公网 IP 的值。
释放公网 IP
若希望释放公网 IP,建议删除 Service,示例如下:
shell
kubectl delete svc sglang-svc注意:
- 将Service类型改为
ClusterIP或者NodePort,也可以释放公网 IP,但是要注意,把yaml中的 NodePort 的具体端口删除,否则可能因为端口冲突,导致释放失败。- 用修改Service类型的方式释放公网IP时,建议通过
kubectl describe service sglang-svc查看 k8s 事件,确保没有错误,表示类型修改成功。