首先将Golang应用部署到启用Istio Sidecar自动注入的Kubernetes命名空间,通过Docker镜像构建并应用Deployment和Service配置,Istio自动注入Envoy代理实现流量拦截;接着配置Gateway和VirtualService允许外部访问,无需修改代码即可实现流量管理、安全通信与可观测性。

将Golang应用与Istio服务网格集成,可以实现流量控制、服务发现、安全通信和可观测性等高级功能。Istio基于Envoy代理,通过Sidecar注入方式自动拦截服务间的网络通信,无需修改应用代码。下面以一个简单的Golang HTTP服务为例,展示如何在Kubernetes中与Istio集成。
1. 编写Golang微服务
创建一个简单的HTTP服务,提供REST接口:
package mainimport ("fmt""log""net/http""os")
func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {host, _ := os.Hostname()fmt.Fprintf(w, "Hello from Go service! Host: %s\n", host)})
port := os.Getenv("PORT")if port == "" { port = "8080"}log.Printf("Starting server on port %s", port)log.Fatal(http.ListenAndServe(":"+port, nil))
}
使用以下
go.mod
:
立即学习“go语言免费学习笔记(深入)”;
module go-servicego 1.21
2. 构建并推送Docker镜像
编写Dockerfile:
FROM golang:1.21-alpine AS builderWORKDIR /appCOPY . .RUN go mod downloadRUN go build -o main .FROM alpine:latestRUN apk --no-cache add ca-certificatesWORKDIR /root/COPY --from=builder /app/main .CMD ["./main"]
构建并推送镜像:
docker build -t your-registry/go-service:v1 .docker push your-registry/go-service:v1
3. 部署到启用了Istio的Kubernetes集群
确保已安装Istio,并启用Sidecar自动注入。为命名空间开启注入:
kubectl create namespace go-appkubectl label namespace go-app istio-injection=enabled
编写Kubernetes部署和服务YAML:
apiVersion: apps/v1kind: Deploymentmetadata: name: go-service namespace: go-appspec: replicas: 2 selector: matchLabels: app: go-service template: metadata: labels: app: go-service spec: containers: - name: go-service image: your-registry/go-service:v1 ports: - containerPort: 8080---apiVersion: v1kind: Servicemetadata: name: go-service namespace: go-appspec: selector: app: go-service ports: - protocol: TCP port: 80 targetPort: 8080
应用配置:
kubectl apply -f deployment.yaml
部署后,Istio会自动注入Envoy Sidecar容器,所有进出流量将被拦截并受Istio控制。
4. 配置Istio网关和虚拟服务
若需从外部访问服务,配置Gateway和VirtualService:
apiVersion: networking.istio.io/v1beta1kind: Gatewaymetadata: name: go-gateway namespace: go-appspec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "*"---apiVersion: networking.istio.io/v1beta1kind: VirtualServicemetadata: name: go-service-vs namespace: go-appspec: hosts: - "*" gateways: - go-gateway http: - route: - destination: host: go-service port: number: 80
应用后,可通过Istio Ingress Gateway访问服务。
基本上就这些。Golang服务无需任何修改即可接入Istio,所有治理能力由服务网格提供。后续可进一步配置流量切分、熔断、mTLS和遥测收集等功能。
以上就是Golang与Istio服务网格集成示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1404016.html
微信扫一扫
支付宝扫一扫