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

Kubernetes cluster with flannel - port forwarding

机器上的设置:

在我工作的机器上,我在集群上安装了 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 网络插件 - 结果相同

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

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 与 kube-proxy 在该节点上打开的 nodePort 一起使用:

➜  ~ 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": {}