linkerd安装后监听的本地端口,从外部访问需要特别配置。这篇文章环境基于gce下kubeadm部署的k8s,不同环境可能情况不同。
步骤
按照官方的步骤就行了,装完linkerd和linkerd viz,最后
就自动监听127.0.0.1了,本地部署的话到这里就可以结束了。我用的gce通过kubeadm部署的,公有云环境稍微复杂点,最后我用的方案是ingress-nginx-control
来实现,中间挺折腾的,记录下。
官方提供了几种expose access的方式,我用的nginx,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| apiVersion: v1 kind: Secret type: Opaque metadata: name: web-ingress-auth namespace: linkerd-viz data: auth: YWRtaW46JGFwcjEkbjdDdTZnSGwkRTQ3b2dmN0NPOE5SWWpFakJPa1dNLgoK ---
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web-ingress namespace: linkerd-viz annotations: nginx.ingress.kubernetes.io/upstream-vhost: $service_name.$namespace.svc.cluster.local:8084 nginx.ingress.kubernetes.io/configuration-snippet: | proxy_set_header Origin ""; proxy_hide_header l5d-remote-ip; proxy_hide_header l5d-server-id; nginx.ingress.kubernetes.io/auth-type: basic nginx.ingress.kubernetes.io/auth-secret: web-ingress-auth nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required' spec: ingressClassName: nginx rules: - host: dashboard.example.com http: paths: - path: / pathType: Prefix backend: service: name: web port: number: 8084
|
这里声明了一个ingress和一个secret,我不打算加https,所以不搞证书了,按照示例的账号密码就可以了。然后需要自己部署ingress-nginx-control,来根据上面的ingress生成具体的服务.
这里也按照官方文档安装就行了。
上面官方yam里面已经提供了service,默认是loadbalancer,在公有云上面比较麻烦,kubectl get service -n **
后没有看到exterlnal ip,参考网上的方法,手动加:
1 2 3 4 5
| ... spec: type: LoadBalancer externalIPs: - 192.168.0.10
|
之后能看到ip了,我在node/master节点都可以访问,但通过本地或者其他地址访问还是不行,具体原因未知。后面为了节约时间手动改成nodeport了,改后也不能直接访问,还需要一步特别配置,在service的yml里面改一下:
1 2 3 4 5 6 7
| // before spec: externalTrafficPolicy: Local
// after spec: externalTrafficPolicy: Cluster
|
再之后就ok了,可以通过域名用http访问了,账号密码官网有,这里改密码目前还没看怎么处理,毕竟是个测试环境,不打算长期用,就不折腾了,后面inject app后看看其他功能。
reference
linkerd.io
ingress-nginx
gke上安装步骤
Cloud Native - Service mesh install and setup
How To Install and Use Linkerd with Kubernetes