带法兰绒的 Kubernetes 集群 - 端口转发
Kubernetes cluster with flannel - port forwarding
机器上的设置:
- 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 网络插件 - 结果相同
但在我使用 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": {}
机器上的设置:
- 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 网络插件 - 结果相同
但在我使用 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": {}