微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有法兰绒的 Kubernetes 集群 - 端口转发

如何解决带有法兰绒的 Kubernetes 集群 - 端口转发

在机器上设置:

  • Ubuntu 20.04
  • Kubernetes 集群使用 kubeadm 和 flannel 网络插件启动

在我的工作机器上,我在集群上安装了 Jenkins,并希望将网络配置为能够从端口 8081 访问 jenkins。认情况下,它只能转发端口(在我的情况下为 30667)。在 ubuntu 上可以吗?

NAME                           READY   STATUS    RESTARTS   AGE
pod/jenkins-5b6cb84957-n497l   1/1     Running   4          93m

NAME                 TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
service/jenkins      LoadBalancer   10.96.81.85   <pending>     8081:30667/TCP   93m
service/kubernetes   ClusterIP      10.96.0.1     <none>        443/TCP          94m

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/jenkins   1/1     1            1           93m

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/jenkins-5b6cb84957   1         1         1       93m

NAME                              COMPLETIONS   DURATION   AGE
job.batch/pv-recycler-generator   1/1           5s         42s

也尝试过使用 calico 网络插件 - 结果相同

但在我在 Mac 和 Windows 上使用 Docker 桌面之前,它可以开箱即用

解决方法

Loadbalancer 的服务类型在您在云上运行时效果最佳,因为云供应商会自动为您创建外部负载均衡器并将其配置为与 Kubernetes 配合使用。如果在 prem 上工作,则整个过程必须由您完成。你自己做或使用 3rd 方工具来做,例如Metallb

注意 External-ip 列中的待处理字段。最简单的方法是手动将其设置为节点的 IP 地址。

首先你有你的节点ip:

➜  ~ k get node -owide
NAME         STATUS     ROLES    AGE    VERSION      INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION    CONTAINER-RUNTIME
instance-1    Ready      master   221d   v1.17.0  ? 10.128.15.230   <none>        Ubuntu 16.04.6 LTS   4.15.0-1090-gcp   docker://18.6.1

然后在服务规范的 externalIPs 字段中添加此 IP 地址:

➜  ~ cat loadbalancer.yml 
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  externalIPs: 
  - 10.128.15.230 ?
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

您可以看到外部 IP 不再挂起:

NAME                  TYPE           CLUSTER-IP        EXTERNAL-IP     PORT(S)                      AGE
my-service            LoadBalancer   10.101.150.192 ? 10.128.15.230   80:11438/TCP                 5m1s

然后您只需将该外部 IP 与 nodePort 在该节点上打开的 kube-proxy 一起使用:

➜  ~ curl 10.128.15.230:11438 
{
  "path": "/","headers": {
    "host": "10.128.15.230:11438","user-agent": "curl/7.47.0","accept": "*/*"
  },"method": "GET","body": "","fresh": false,"hostname": "10.128.15.230","ip": "::ffff:10.128.15.230","ips": [],"protocol": "http","query": {},"subdomains": [],"xhr": false,"os": {
    "hostname": "label-demo"
  },"connection": {}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。