安装docker-compose

# ubuntu
apt-get install docker-compose# centos
yum install docker-compose

下载kompose

由于官网仅提供了docker-compose安装方式,没有提供k8s部署的yaml文件,所以需要根据docker-compose文件转化k8s部署的yaml文件。
这里发现了一个好用的工具: kompose

kompose官网:https://kompose.io/
github地址:https://github.com/kubernetes/kompose

下载命令:

# Linux
curl -L https://github.com/kubernetes/kompose/releases/download/v1.23.0/kompose-linux-amd64 -o kompose# macOS
curl -L https://github.com/kubernetes/kompose/releases/download/v1.23.0/kompose-darwin-amd64 -o kompose# Windows
curl -L https://github.com/kubernetes/kompose/releases/download/v1.23.0/kompose-windows-amd64.exe -o kompose.exechmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose

这里根据自己的平台选择就好,由于我的集群版本安装的是1.23.6,所以kompose选择的1.23.0版本。

下载syncthing

官方资料

官网:https://syncthing.net/
github地址:https://github.com/syncthing/syncthing

生成docker-compose文件

根据官方叙述,是使用docker直接运行syncthing,这里是官方docker-compose

version: "3"
services:syncthing:image: syncthing/syncthingcontainer_name: syncthinghostname: my-syncthingenvironment:- PUID=1000- PGID=1000volumes:- /wherever/st-sync:/var/syncthingports:- 8384:8384 # Web UI- 22000:22000/tcp # TCP file transfers- 22000:22000/udp # QUIC file transfers- 21027:21027/udp # Receive local discovery broadcastsrestart: unless-stopped

有了docker-compose就可以按照自己的需要进行容器编排。

生成kubenetes yaml文件

我目标是使用k8s部署,所以这里生成个对应的yaml文件。
使用kompose进行转换

kompose convert -f syncthing.yml

执行完成后进行优化整合为一个大的kubenetes部署配置文件。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:creationTimestamp: nulllabels:io.kompose.service: syncthingpvcname: syncthingpvc
spec:accessModes:- ReadWriteOncestorageClassName: manualresources:requests:storage: 2048Gi---
apiVersion: apps/v1
kind: Deployment
metadata:annotations:kompose.cmd: kompose convert -f syncthing/syncthing.ymlkompose.version: 1.23.0 (bc7d9f4f)creationTimestamp: nulllabels:io.kompose.service: syncthingname: syncthing
spec:replicas: 1selector:matchLabels:io.kompose.service: syncthingstrategy:type: Recreatetemplate:metadata:annotations:kompose.cmd: kompose convert -f syncthing/syncthing.ymlkompose.version: 1.23.0 (bc7d9f4f)creationTimestamp: nulllabels:io.kompose.service: syncthingspec:containers:- env:- name: PGIDvalue: "1000"- name: PUIDvalue: "1000"- name: TZvalue: '"Asia/Shanghai"'image: linuxserver/syncthing:1.23.2name: syncthingports:- containerPort: 8384- containerPort: 22000- containerPort: 22000protocol: UDP- containerPort: 21027protocol: UDPresources: {}volumeMounts:- mountPath: /var/syncthingname: syncthingpvchostname: syncthing-hostnamerestartPolicy: Alwaysvolumes:- name: syncthingpvcpersistentVolumeClaim:claimName: syncthingpvc---
apiVersion: v1
kind: Service
metadata:annotations:kompose.cmd: kompose convert -f syncthing/syncthing.ymlkompose.version: 1.23.0 (bc7d9f4f)creationTimestamp: nulllabels:io.kompose.service: syncthingname: syncthing
spec:ports:- name: "8384"port: 8384targetPort: 8384- name: "22000"port: 22000targetPort: 22000- name: 22000-udpport: 22000protocol: UDPtargetPort: 22000- name: "21027"port: 21027protocol: UDPtargetPort: 21027selector:io.kompose.service: syncthing

执行部署命令:

kubectl apply -f syncthing-k8s.yaml

然后等待pod运行。

# kubectl get pod
NAME                         READY   STATUS    RESTARTS   AGE
syncthing-85f46699c5-hljqz   1/1     Running   0          83m

外部访问

查看创建的service:

# kubectl get service -A
NAMESPACE     NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                  AGE
default       kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP                                  24d
default       syncthing        ClusterIP   10.96.221.138   <none>        8384/TCP,22000/TCP,22000/UDP,21027/UDP   3h7m
kube-system   kube-dns         ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP                   24d
kube-system   metrics-server   ClusterIP   10.96.9.211     <none>        443/TCP                                  22d

很明显集群ip是10.96.221.138,在浏览器使用10.96.221.138:8384访问syncthing,发现访问不了。这是因为这个ip是在集群间互相识别使用的,此时无论从物理机浏览器还是跳板机curl等都无法通过这个IP直接访问,想实现集群外部访问(跳板机或者同局域网下的机器),要安装下Ingress组件实现。

部署Ingress

k8s集群以外访问k8s集群要借助ingress进行

下载ingress

可以参考官方文档:https://github.com/kubernetes/ingress-nginx/blob/main/docs/deploy/index.md
官方文档提示可以使用下面的命令直接apply:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.6.4/deploy/static/provider/cloud/deploy.yaml

我这里将yaml保存下来:

apiVersion: v1
kind: Namespace
metadata:name: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginx---
# Source: ingress-nginx/templates/controller-serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:labels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: controllername: ingress-nginxnamespace: ingress-nginx
automountServiceAccountToken: true
---
# Source: ingress-nginx/templates/controller-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:labels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: controllername: ingress-nginx-controllernamespace: ingress-nginx
data:allow-snippet-annotations: 'true'
---
# Source: ingress-nginx/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:labels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmname: ingress-nginx
rules:- apiGroups:- ''resources:- configmaps- endpoints- nodes- pods- secrets- namespacesverbs:- list- watch- apiGroups:- ''resources:- nodesverbs:- get- apiGroups:- ''resources:- servicesverbs:- get- list- watch- apiGroups:- networking.k8s.ioresources:- ingressesverbs:- get- list- watch- apiGroups:- ''resources:- eventsverbs:- create- patch- apiGroups:- networking.k8s.ioresources:- ingresses/statusverbs:- update- apiGroups:- networking.k8s.ioresources:- ingressclassesverbs:- get- list- watch
---
# Source: ingress-nginx/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:labels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmname: ingress-nginx
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: ingress-nginx
subjects:- kind: ServiceAccountname: ingress-nginxnamespace: ingress-nginx
---
# Source: ingress-nginx/templates/controller-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:labels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: controllername: ingress-nginxnamespace: ingress-nginx
rules:- apiGroups:- ''resources:- namespacesverbs:- get- apiGroups:- ''resources:- configmaps- pods- secrets- endpointsverbs:- get- list- watch- apiGroups:- ''resources:- servicesverbs:- get- list- watch- apiGroups:- networking.k8s.ioresources:- ingressesverbs:- get- list- watch- apiGroups:- networking.k8s.ioresources:- ingresses/statusverbs:- update- apiGroups:- networking.k8s.ioresources:- ingressclassesverbs:- get- list- watch- apiGroups:- ''resources:- configmapsresourceNames:- ingress-controller-leaderverbs:- get- update- apiGroups:- ''resources:- configmapsverbs:- create- apiGroups:- ''resources:- eventsverbs:- create- patch
---
# Source: ingress-nginx/templates/controller-rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:labels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: controllername: ingress-nginxnamespace: ingress-nginx
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: ingress-nginx
subjects:- kind: ServiceAccountname: ingress-nginxnamespace: ingress-nginx
---
# Source: ingress-nginx/templates/controller-service-webhook.yaml
apiVersion: v1
kind: Service
metadata:labels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: controllername: ingress-nginx-controller-admissionnamespace: ingress-nginx
spec:type: ClusterIPports:- name: https-webhookport: 443targetPort: webhookappProtocol: httpsselector:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/component: controller
---
# Source: ingress-nginx/templates/controller-service.yaml
apiVersion: v1
kind: Service
metadata:annotations:labels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: controllername: ingress-nginx-controllernamespace: ingress-nginx
spec:type: LoadBalancerexternalTrafficPolicy: LocalipFamilyPolicy: SingleStackipFamilies:- IPv4ports:- name: httpport: 80protocol: TCPtargetPort: httpappProtocol: http- name: httpsport: 443protocol: TCPtargetPort: httpsappProtocol: httpsselector:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/component: controller
---
# Source: ingress-nginx/templates/controller-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: controllername: ingress-nginx-controllernamespace: ingress-nginx
spec:selector:matchLabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/component: controllerrevisionHistoryLimit: 10minReadySeconds: 0template:metadata:labels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/component: controllerspec:dnsPolicy: ClusterFirstcontainers:- name: controllerimage: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.1.1imagePullPolicy: IfNotPresentlifecycle:preStop:exec:command:- /wait-shutdownargs:- /nginx-ingress-controller- --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller- --election-id=ingress-controller-leader- --controller-class=k8s.io/ingress-nginx- --configmap=$(POD_NAMESPACE)/ingress-nginx-controller- --validating-webhook=:8443- --validating-webhook-certificate=/usr/local/certificates/cert- --validating-webhook-key=/usr/local/certificates/keysecurityContext:capabilities:drop:- ALLadd:- NET_BIND_SERVICErunAsUser: 101allowPrivilegeEscalation: trueenv:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: LD_PRELOADvalue: /usr/local/lib/libmimalloc.solivenessProbe:failureThreshold: 5httpGet:path: /healthzport: 10254scheme: HTTPinitialDelaySeconds: 10periodSeconds: 10successThreshold: 1timeoutSeconds: 1readinessProbe:failureThreshold: 3httpGet:path: /healthzport: 10254scheme: HTTPinitialDelaySeconds: 10periodSeconds: 10successThreshold: 1timeoutSeconds: 1ports:- name: httpcontainerPort: 80protocol: TCP- name: httpscontainerPort: 443protocol: TCP- name: webhookcontainerPort: 8443protocol: TCPvolumeMounts:- name: webhook-certmountPath: /usr/local/certificates/readOnly: trueresources:requests:cpu: 100mmemory: 90MinodeSelector:kubernetes.io/os: linuxserviceAccountName: ingress-nginxterminationGracePeriodSeconds: 300volumes:- name: webhook-certsecret:secretName: ingress-nginx-admission
---
# Source: ingress-nginx/templates/controller-ingressclass.yaml
# We don't support namespaced ingressClass yet
# So a ClusterRole and a ClusterRoleBinding is required
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:labels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: controllername: nginxnamespace: ingress-nginx
spec:controller: k8s.io/ingress-nginx
---
# Source: ingress-nginx/templates/admission-webhooks/validating-webhook.yaml
# before changing this value, check the required kubernetes version
# https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#prerequisites
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:labels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: admission-webhookname: ingress-nginx-admission
webhooks:- name: validate.nginx.ingress.kubernetes.iomatchPolicy: Equivalentrules:- apiGroups:- networking.k8s.ioapiVersions:- v1operations:- CREATE- UPDATEresources:- ingressesfailurePolicy: FailsideEffects: NoneadmissionReviewVersions:- v1clientConfig:service:namespace: ingress-nginxname: ingress-nginx-controller-admissionpath: /networking/v1/ingresses
---
# Source: ingress-nginx/templates/admission-webhooks/job-patch/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: ingress-nginx-admissionnamespace: ingress-nginxannotations:helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgradehelm.sh/hook-delete-policy: before-hook-creation,hook-succeededlabels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: admission-webhook
---
# Source: ingress-nginx/templates/admission-webhooks/job-patch/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: ingress-nginx-admissionannotations:helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgradehelm.sh/hook-delete-policy: before-hook-creation,hook-succeededlabels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: admission-webhook
rules:- apiGroups:- admissionregistration.k8s.ioresources:- validatingwebhookconfigurationsverbs:- get- update
---
# Source: ingress-nginx/templates/admission-webhooks/job-patch/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: ingress-nginx-admissionannotations:helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgradehelm.sh/hook-delete-policy: before-hook-creation,hook-succeededlabels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: admission-webhook
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: ingress-nginx-admission
subjects:- kind: ServiceAccountname: ingress-nginx-admissionnamespace: ingress-nginx
---
# Source: ingress-nginx/templates/admission-webhooks/job-patch/role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: ingress-nginx-admissionnamespace: ingress-nginxannotations:helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgradehelm.sh/hook-delete-policy: before-hook-creation,hook-succeededlabels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: admission-webhook
rules:- apiGroups:- ''resources:- secretsverbs:- get- create
---
# Source: ingress-nginx/templates/admission-webhooks/job-patch/rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: ingress-nginx-admissionnamespace: ingress-nginxannotations:helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgradehelm.sh/hook-delete-policy: before-hook-creation,hook-succeededlabels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: admission-webhook
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: ingress-nginx-admission
subjects:- kind: ServiceAccountname: ingress-nginx-admissionnamespace: ingress-nginx
---
# Source: ingress-nginx/templates/admission-webhooks/job-patch/job-createSecret.yaml
apiVersion: batch/v1
kind: Job
metadata:name: ingress-nginx-admission-createnamespace: ingress-nginxannotations:helm.sh/hook: pre-install,pre-upgradehelm.sh/hook-delete-policy: before-hook-creation,hook-succeededlabels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: admission-webhook
spec:template:metadata:name: ingress-nginx-admission-createlabels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: admission-webhookspec:containers:- name: createimage: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1imagePullPolicy: IfNotPresentargs:- create- --host=ingress-nginx-controller-admission,ingress-nginx-controller-admission.$(POD_NAMESPACE).svc- --namespace=$(POD_NAMESPACE)- --secret-name=ingress-nginx-admissionenv:- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacesecurityContext:allowPrivilegeEscalation: falserestartPolicy: OnFailureserviceAccountName: ingress-nginx-admissionnodeSelector:kubernetes.io/os: linuxsecurityContext:runAsNonRoot: truerunAsUser: 2000
---
# Source: ingress-nginx/templates/admission-webhooks/job-patch/job-patchWebhook.yaml
apiVersion: batch/v1
kind: Job
metadata:name: ingress-nginx-admission-patchnamespace: ingress-nginxannotations:helm.sh/hook: post-install,post-upgradehelm.sh/hook-delete-policy: before-hook-creation,hook-succeededlabels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: admission-webhook
spec:template:metadata:name: ingress-nginx-admission-patchlabels:helm.sh/chart: ingress-nginx-4.0.15app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/version: 1.1.1app.kubernetes.io/managed-by: Helmapp.kubernetes.io/component: admission-webhookspec:containers:- name: patchimage: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1imagePullPolicy: IfNotPresentargs:- patch- --webhook-name=ingress-nginx-admission- --namespace=$(POD_NAMESPACE)- --patch-mutating=false- --secret-name=ingress-nginx-admission- --patch-failure-policy=Failenv:- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacesecurityContext:allowPrivilegeEscalation: falserestartPolicy: OnFailureserviceAccountName: ingress-nginx-admissionnodeSelector:kubernetes.io/os: linuxsecurityContext:runAsNonRoot: truerunAsUser: 2000

部署ingress-nginx-controller

接下来apply配置文件。

# kubectl get pod -n ingress-nginx
NAME                                        READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-nxq97        0/1     Completed   0          31s
ingress-nginx-admission-patch-g2tn4         0/1     Completed   0          31s
ingress-nginx-controller-74c6bcdc65-qdwct   1/1     Running     0          31s

syncthing域名访问

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-host-bar
spec:ingressClassName: nginx       #默认就写Nginxrules:- host: "xxxxx"           #服务的域名http:paths: - pathType: Prefix        #表示以前缀的方式进行匹配path: "/"               #前缀必须有个"/",才可以成功匹配backend:service:              #规定Ingress后端的Servicename: syncthing      #后端Service的名称port:  number: 8384      #后端Service监听的端口

使用下面的命令apply:

kubectl apply -f ingress-syncthing.yaml

访问Ingress:

# kubectl get svc -n ingress-nginx
NAME                                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.96.252.85   <none>        80:31465/TCP,443:31816/TCP   27m
ingress-nginx-controller-admission   ClusterIP   10.96.210.66   <none>        443/TCP                      27m

但是此时的域名还不能直接用于访问,需要在本地配置下域名映射,例如在linux的/etc/hosts文件内增加woker阶段和自定义域名的解析。
也可以去买个域名,我是购买了一个阿里云的域名,然后配置解析woker节点的ip(192网段),这样在局域网内直接访问域名+端口就可以访问后端了

例如:域名xxx:31465/
这个根path “/” 一定要带。。。

K8S篇-安装Syncthing相关推荐

  1. K8S篇-安装nfs插件

    前言 有关k8s的搭建可以参考:http://t.csdn.cn/H84Zu 有关过程中使用到的nfs相关的nas,可以参考: http://t.csdn.cn/ACfoT http://t.csdn ...

  2. 容器云之K8s自动化安装方式的选择

    目前kubernetes 已经发展到1.5的时代,但在这之前学习和使用kubernetes还是走了不少弯路,第一个问题就是安装,也许你会说安装很简单.照着官网或网上抄一篇就可以装上了-- 而我们使用k ...

  3. 废旧手机安装Syncthing作为文件服务器

    本人非软件专业人士,因为平时喜欢网络,故凭借三脚猫的功夫边学变卖完成了这一篇用废旧手机通过安装synthing后用作文件服务器的文章. 上次安装的Aidlux文件太大后来没用,换成了Termux,这个 ...

  4. k8s上安装并初始化Helm。minikube

    helm简介 Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现.共 享和使用为Kubernetes构建的应用. Helm 采用客户端/服务器架构,有如下组件组成: Helm C ...

  5. k8s上安装并初始化Helm,helm基础使用教程

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 helm的github地址:https://github.com/helm/helm?spm=a2c4g.11186623.2.7.Qr9c2B he ...

  6. 【NodeJs-5天学习】第四天存储篇① ——安装使用mysql 8.0

    [NodeJs-5天学习]第四天篇① --安装mysql 8.0 1. 前言 2. MySql 8.0 2.1 下载 2.2 安装 2.3 常用命令 2.3.1 MySQL服务的启动和停止 2.3.2 ...

  7. DockerK8s---跟我一步步部署K8s(二进制安装部署)

    文章目录 Docker&K8s---跟我一步步部署K8s(二进制安装部署) Kubernetes(K8s)概述 Kubernetes快速入门 四组基本概念 常见的K8s安装部署方式 准备工作 ...

  8. 废旧手机安装Syncthing作为文件服务器之2-文件同步

    上次说到通过termux用废旧手机做文件服务器,如下文 ss​​​​​​​废旧手机安装Syncthing作为文件服务器_m0_59677938的博客-CSDN博客 最后发现OTG U盘映射不进来,所以 ...

  9. 树莓派 安装 Syncthing 自建私有云盘 照片备份 备份手机相册

    手机上存着不少照片,自己又时常折腾手机,总有数据丢失的问题,又对市面上的云盘不怎么放心,所以打算在家里利用树莓派搭建一个私有云.一番查找之后,发现了 syncthing.Syncthing 是一个跨平 ...

最新文章

  1. 并发基础(七):Thread 类的sleep()、yeild()、join()
  2. MybatisPlus条件构造器说明以及selectPage方法
  3. Linux环境下安装Tigase XMPP Server
  4. Effective Modern C++:06lambda表达式
  5. [机器学习] 分类 --- Naive Bayes(朴素贝叶斯)
  6. 消息队列控制灯代码_代码实现RabbitMQ死信队列的创建
  7. 【PAT - 甲级1094】The Largest Generation (25分)(dfs建树)
  8. WinAPI: midiOutClose - 关闭输出设备
  9. http下载异常_百度网站抓取异常的原因有哪些?有什么影响和解决方法?
  10. 文件上传漏洞原理/方式/防护
  11. python爬虫框架论文开题报告范文_论文开题报告框架
  12. SONY索尼摄像机Z280断电KLV.RSV.MXF视频打不开数据恢复成功
  13. android studio 底部工具栏,教大家android studio工具栏不见了如何找回
  14. 如何设置QQ和微信截图快捷键
  15. 用python可以做什么有趣的事情_用python做一些有趣的事(一)——根据照片制作版画...
  16. sqlserver知识---表的创建
  17. SDL介绍----4、S-SDLC安全开发生命周期
  18. PXE启动配置及原理
  19. 通信系统原理[郭宇春]——信号与噪声——课后习题答案
  20. 浅谈自动化测试中的验证码处理方法小总结

热门文章

  1. JS 运行机制最全面的一次梳理
  2. 利用Ubuntu的U盘安装盘安装build-essential
  3. 有哪些有效解决程序员中年危机的方法?
  4. Mozilla发布最大的人类语音数据集(Common Voice)
  5. java 水印处理_java 图片水印处理
  6. 项目中项目评估概述及原则
  7. java上传图片报404_如何解决SpringBoot集成百度UEditor图片上传后直接访问404
  8. 物联网发展预期与展望
  9. 电商数据仓库系统项目操作可行性
  10. 【面试】嵌入式C语言题目整理